diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..bdb96709 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +docker diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 00000000..a76805b4 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,22 @@ +FROM golang:1.6.2 + +MAINTAINER Michał Czeraszkiewicz + +# Set the reset cache variable +# Read more here: http://czerasz.com/2014/11/13/docker-tip-and-tricks/#use-refreshedat-variable-for-better-cache-control +ENV REFRESHED_AT 2016-05-10 + +# Update the package list to be able to use required packages +RUN apt-get update + +# Change the working directory +WORKDIR /go/src/mgmt + +# Copy all the files to the working directory +COPY . /go/src/mgmt + +# Install dependencies +RUN make deps + +# Build the binary +RUN make build diff --git a/docker/Dockerfile.development b/docker/Dockerfile.development new file mode 100644 index 00000000..dbed0105 --- /dev/null +++ b/docker/Dockerfile.development @@ -0,0 +1,31 @@ +FROM golang:1.6.2 + +MAINTAINER Michał Czeraszkiewicz + +# Set the reset cache variable +# Read more here: http://czerasz.com/2014/11/13/docker-tip-and-tricks/#use-refreshedat-variable-for-better-cache-control +ENV REFRESHED_AT 2016-05-14 + +RUN apt-get update + +# Setup User to match Host User +# Give the nre user superuser permissions +ARG USER_ID=1000 +ARG GROUP_ID=1000 +ARG USER_NAME=mgmt +ARG GROUP_NAME=$USER_NAME +RUN groupadd --gid $GROUP_ID $GROUP_NAME && \ + useradd --create-home --home /home/$USER_NAME --uid ${USER_ID} --gid $GROUP_NAME --groups sudo $USER_NAME && \ + echo "$USER_NAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers + +# Copy all the files to the working directory +COPY . /home/$USER_NAME/mgmt + +# Change working directory +WORKDIR /home/$USER_NAME/mgmt + +# Install dependencies +RUN make deps + +# Change user +USER ${USER_NAME} diff --git a/docker/scripts/build b/docker/scripts/build new file mode 100755 index 00000000..1c35c5bc --- /dev/null +++ b/docker/scripts/build @@ -0,0 +1,26 @@ +#!/bin/bash + +script_directory="$( cd "$( dirname "$0" )" && pwd )" +project_directory=$script_directory/../.. + +# Specify the Docker image name +image_name='purpleidea/mgmt' + +# Build the image which contains the compiled binary +docker build -t $image_name \ + --file=$project_directory/docker/Dockerfile $project_directory + +# Remove the container if it already exists +docker rm -f mgmt-export 2> /dev/null + +# Start the container in background so we can "copy out" the binary +docker run -d --name=mgmt-export $image_name bash -c 'while true; sleep 1000; done' + +# Remove the current binary +rm $project_directory/mgmt 2> /dev/null + +# Get the binary from the container +docker cp mgmt-export:/go/src/mgmt/mgmt $project_directory/mgmt + +# Remove the container +docker rm -f mgmt-export 2> /dev/null diff --git a/docker/scripts/build-development b/docker/scripts/build-development new file mode 100755 index 00000000..0e9cc556 --- /dev/null +++ b/docker/scripts/build-development @@ -0,0 +1,14 @@ +#!/bin/bash + +# Stop on any error +set -e + +script_directory="$( cd "$( dirname "$0" )" && pwd )" +project_directory=$script_directory/../.. + +# Specify the Docker image name +image_name='purpleidea/mgmt:development' + +# Build the image +docker build -t $image_name \ + --file=$project_directory/docker/Dockerfile.development $project_directory diff --git a/docker/scripts/run-development b/docker/scripts/run-development new file mode 100755 index 00000000..3d0bfa6f --- /dev/null +++ b/docker/scripts/run-development @@ -0,0 +1,15 @@ +#!/bin/bash + +# Stop on any error +set -e + +script_directory="$( cd "$( dirname "$0" )" && pwd )" +project_directory=$script_directory/../.. + +# Specify the Docker image name +image_name='purpleidea/mgmt:development' + +# Run container in development mode +docker run --rm --name=mgm_development --user=mgmt \ + -v $project_directory:/home/mgmt/mgmt \ + -it $image_name bash diff --git a/misc/make-deps.sh b/misc/make-deps.sh index c175bf86..6815ed41 100755 --- a/misc/make-deps.sh +++ b/misc/make-deps.sh @@ -9,6 +9,8 @@ if env | grep -q '^TRAVIS=true$'; then travis=1 fi +sudo_command=$(which sudo) + if [ $travis -eq 0 ]; then YUM=`which yum 2>/dev/null` APT=`which apt-get 2>/dev/null` @@ -18,15 +20,15 @@ if [ $travis -eq 0 ]; then fi if [ ! -z "$YUM" ]; then # some go dependencies are stored in mercurial - sudo $YUM install -y golang golang-googlecode-tools-stringer hg + $sudo_command $YUM install -y golang golang-googlecode-tools-stringer hg fi if [ ! -z "$APT" ]; then - sudo $APT update - sudo $APT install -y golang make gcc packagekit mercurial + $sudo_command $APT update + $sudo_command $APT install -y golang make gcc packagekit mercurial # one of these two golang tools packages should work on debian - sudo $APT install -y golang-golang-x-tools || true - sudo $APT install -y golang-go.tools || true + $sudo_command $APT install -y golang-golang-x-tools || true + $sudo_command $APT install -y golang-go.tools || true fi fi