Skip to content

Instantly share code, notes, and snippets.

@XavM
Last active August 30, 2016 13:04
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save XavM/88381b2eb76545543dd5cb2ba31a770d to your computer and use it in GitHub Desktop.
Build zbo-ana from scratch using Docker

Build zbo-ana from scratch (using Docker)

Run a fresh build CT

CT_ID=$(docker run -itd centos /bin/bash)

Enter CT

docker exec -it "${CT_ID}" /bin/bash

Install and setup GOLANG

cd ~
curl -LO https://storage.googleapis.com/golang/go1.7.linux-amd64.tar.gz \
  && tar -C /usr/local -xzf go1.7.linux-amd64.tar.gz \
  && rm -rf go1.7.linux-amd64.tar.gz \
  && export PATH=$PATH:/usr/local/go/bin

Create your GOLANG build workspace

export GOPATH=$HOME/work
mkdir -p $GOPATH/src/github.com/user/ 

Get sources and dependencies

git version || yum install git -y \
  && git clone 'https://zbo-ad@github.com/zebestof/zbo-ana.git' $GOPATH/src/github.com/user/zbo-ana

cd $GOPATH \
  && go get gopkg.in/olivere/elastic.v2 \
  && go get github.com/gorilla/mux \
  && go get github.com/oschwald/maxminddb-golang

Get mandatory files (conf and geoIP DB)

cp  $GOPATH/src/github.com/user/zbo-ana/config-production.json $GOPATH/ \
  && curl -LO http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz \
  && gzip -d $GOPATH/GeoLite2-City.mmdb.gz

Build zbo-ana

cd $GOPATH
#env GOOS=linux GOARCH=amd64 ## <- Cross compile only to target production OS and ARCH
go install github.com/user/zbo-ana

Run zbo-ana

$GOPATH/bin/zbo-ana 

[optional] Make a release out of your build

RELEASE_VERSION="v1.7.0" \
  && mkdir -p $GOPATH/release \
  && rm -rf $GOPATH/release/* \
  && cp $GOPATH/bin/zbo-ana $GOPATH/release/ \
  && cp  $GOPATH/src/github.com/user/zbo-ana/config-production.json $GOPATH/release/ \
  && tar zcvf $GOPATH/release-${RELEASE_VERSION}.tar.gz -C $GOPATH/release/ . \
  && rm -rf $GOPATH/release \
  && ll $GOPATH/release-${RELEASE_VERSION}.tar.gz

[optional] Create and Upload the release to gitHub

RELEASE_VERSION="v1.7.0" \
  && gitHub_USER="xavm" \
  && jq --version 2>&1>/dev/null || {
    yum install epel-release -y \
    && yum install jq -y; } \
  && RELEASE_SPECS=$(curl -sSu "${gitHub_USER}" -X POST "https://api.github.com/repos/zebestof/zbo-ana/releases" -d '{
    "tag_name": "'${RELEASE_VERSION}'",
    "target_commitish": "master",
    "name": "'${RELEASE_VERSION}'",
    "body": "'${RELEASE_VERSION}'",
    "draft": false,
    "prerelease": false
  }') \
  && RELEASE_UPLOAD_URL=$(echo "${RELEASE_SPECS}"| jq -r '.upload_url' | cut -d"{" -f 1) \
  && RELEASE_ID=$(echo "${RELEASE_SPECS}"| jq -r '.id')
curl -sSu "${gitHub_USER}" \
     -H "Content-Type: application/gzip" \
     -X POST "${RELEASE_UPLOAD_URL}?name=release-${RELEASE_VERSION}.tar.gz" \
     --data-binary @$GOPATH/release-${RELEASE_VERSION}.tar.gz  

[optional] Commit your docker GOLANG build env (and skip every steps before "Build zbo-ana" next time)

COMMIT_OUT=$(docker commit "${CT_ID}")
IMAGE_ID="${COMMIT_OUT##*:}"

[optional] Create e new build, skipping every steps before "Build zbo-ana"

docker run -it $IMAGE_ID /bin/bash
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/work  
cd $GOPATH/src/github.com/user/zbo-ana
git pull 
cd $GOPATH
go install github.com/user/zbo-ana
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment