A fork of pappy proxy
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

149 lines
3.8 KiB

#!/bin/bash
prompt_yn() {
read -p "$1 (yN) " yn;
case $yn in
[Yy]* ) return 0;;
* ) return 1;;
esac
}
require() {
if ! $@; then
echo "Error running $@, exiting...";
exit 1;
fi
}
GO="$(which go)"
BUILDFLAGS=""
PUPPYREPO="https://github.com/roglew/puppy.git"
PUPPYVERSION="tags/0.2.3"
INSTALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
TMPGOPATH="$INSTALLDIR/gopath"
DATADIR="$HOME/.pappy"
VIRTUALENVNAME="pappyenv"
while getopts "g:f:r:dh" opt; do
case $opt in
g)
GO="$OPTARG"
;;
f)
BUILDFLAGS="${OPTARG}"
;;
r)
PUPPYREPO="${OPTARG}"
DEV="yes"
;;
d)
DEV="yes"
;;
h)
echo -e "Build script flags:"
echo -e "-g [path to go]\tUse specific go binary to compile puppy"
echo -e "-f [arguments]\tArguments to pass to \"go build\". ie -f \"-ldflags -s\""
echo -e "-r [git repository link]\t download puppy from an alternate repository"
echo -e "-d\tinstall puppy in development mode by using \"pip install -e\" to install puppy"
echo -e "-h\tprint this help message"
echo -e ""
exit 0;
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1;
;;
esac
done
if ! type "pip" > /dev/null; then
if ! type "easy_install" > /dev/null; then
echo "easy_install not available. Please install easy_install then try again."
exit 1;
fi
if prompt_yn "Installation requires pip. Install pip using \"sudo easy_install pup\"?"; then
require sudo easy_install pip;
else
echo "Please install pip and try the installation again"
exit 1;
fi
fi
cd /tmp
if python -c "import pappyproxy" &> /dev/null; then
echo "An earlier version of pappy appears to be installed. Please remove it and try installation again."
echo "This can likely be done by running \"pip uninstall pappyproxy\""
exit 1;
fi
cd "$INSTALLDIR"
# Set up fake gopath
if [ -z "$GOPATH" ]; then
echo "No GOPATH detected, creating temporary GOPATH at $TMPGOPATH";
export GOPATH="$TMPGOPATH";
fi
require mkdir -p "$GOPATH/src"
# Clone the repo
REPODIR="$GOPATH/src/puppy";
if [ ! -d "$REPODIR" ]; then
# Clone the repo if it doesn't exist
require mkdir -p "$REPODIR";
echo git clone "$PUPPYREPO" "$REPODIR";
require git clone "$PUPPYREPO" "$REPODIR";
fi
# Check out the correct version
cd "$REPODIR";
if [ $DEV ] || [ $REPODIR ]; then
# If it's development, get the most recent version of puppy
require git pull;
else
# if it's not development, get the specified version
require git checkout "$PUPPYVERSION";
fi
cd "$INSTALLDIR"
# Get dependencies
cd "$REPODIR";
echo "Getting puppy dependencies..."
require "$GO" get ./...;
# Build puppy into the data dir
echo "Building puppy into $DATADIR/puppy...";
require mkdir -p "$DATADIR";
require "$GO" build -o "$DATADIR"/puppy $BUILDFLAGS "puppy/cmd/main";
# Clear out old .pyc files
require find "$INSTALLDIR/pappyproxy" -iname "*.pyc" -exec rm -f {} \;
# Set up the virtual environment
if ! type "virtualenv" > /dev/null; then
if prompt_yn "\"virtualenv\" not installed. Install using pip?"; then
require sudo pip install virtualenv
else
exit 1;
fi
fi
VENVDIR="$DATADIR/venv";
require mkdir -p "$VENVDIR";
require virtualenv -p "$(which python3)" "$VENVDIR";
cd "$VENVDIR";
require source bin/activate;
cd "$INSTALLDIR";
if [ -z $DEV ]; then
require pip install -e .
else
require pip install .
fi
echo -e "#!/bin/bash\nsource \"$VENVDIR/bin/activate\";\npappy \$@;\n" > start
chmod +x start;
echo ""
echo "Pappy installed. Run pappy by executing the generated \"start\" script."