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.
147 lines
3.8 KiB
147 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 |
|
|
|
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 |
|
|
|
# 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."
|
|
|