-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwmake.sh
132 lines (114 loc) · 5.67 KB
/
wmake.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/bin/bash
set -e
###################################
# VARIABLES
###################################
IMAGE_NAME="docker_image"
WIN_HOST_RAILS_WS=$PWD
CONTAINER_MOUNT_WS="//tmp//app"
CONTAINER_RAILS_WS="//usr//src//app"
PORT=3000
B2D_HOME=C:/"Program Files"/"Boot2Docker for Windows"
VBOX_HOME=C:/"Program Files"/Oracle/VirtualBox
FILENAME="wmake.sh"
###################################
# Show help etc.
PROCEED=0
if [ $# -eq 0 ]; then
echo "Invalid arguments. Call '$FILENAME help' for more info."
elif [ $1 == "help" ]; then
echo "Usage: $FILENAME COMMAND/S"
echo ""
echo "Windows Boot2Docker helper script. If starting from scratch, the following order of commands should be used to get you started: docker, setup, build."
echo ""
echo "Commands:"
echo " $FILENAME help Prints out the help contents"
echo ""
echo " $FILENAME bash Starts the bash console on host computer with Docker environment configured"
echo ""
echo " $FILENAME build Installs Rails gems"
echo ""
echo " $FILENAME docker Creates the Docker image from the Dockerfile"
echo ""
echo " $FILENAME setup Sets up the Rails Docker image & Rails project"
echo ""
echo " $FILENAME run Starts the Rails server in the configured Docker container"
echo ""
echo " $FILENAME cli Starts the bash console in the configured Docker container"
echo " (with unison syncing which means a bit slower startup, but faster command execution)"
echo ""
echo " $FILENAME cli sync Starts the bash console in the configured Docker container"
echo " (without Unison syncing, fast startup but horrendously slow command execution)"
echo ""
echo " $FILENAME clean Removes the Docker image (this will also remove the downloaded packages)"
echo ""
echo " $FILENAME cclean Removes all the stopped Docker containers (cleans up some disk space)"
else
PROCEED=1
fi
# Only continue if not help...
if [ $PROCEED -eq 1 ]; then
cd "$B2D_HOME"
# Copy of Boot2Docker start.sh from here on
# clear the MSYS MOTD
clear
cd "$(dirname "$BASH_SOURCE")"
ISO="$HOME/.boot2docker/boot2docker.iso"
if [ ! -e "$ISO" ]; then
echo 'copying initial boot2docker.iso (run "boot2docker.exe download" to update)'
mkdir -p "$(dirname "$ISO")"
cp ./boot2docker.iso "$ISO"
fi
echo 'initializing...'
./boot2docker.exe init
echo
echo 'starting...'
./boot2docker.exe start
echo
echo 'IP address of docker VM:'
./boot2docker.exe ip
echo
echo 'setting environment variables ...'
./boot2docker.exe shellinit | sed 's,\\,\\\\,g' # eval swallows single backslashes in windows style path
eval "$(./boot2docker.exe shellinit 2>/dev/null | sed 's,\\,\\\\,g')"
echo
# Modification of original code
cd "$VBOX_HOME"
echo "$VBOX_HOME"
set +e
VBoxManage controlvm boot2docker-vm natpf1 delete "rails-server"
set -e
VBoxManage controlvm boot2docker-vm natpf1 "rails-server,tcp,127.0.0.1,$PORT,,$PORT"
cd "$B2D_HOME"
echo 'You can now use `docker` directly, or `boot2docker ssh` to log into the VM.'
cd
# End of copy Boot2Docker start.sh
if [ $1 == "bash" ]; then
exec "$BASH" --login -i
elif [ $1 == "setup" ]; then
exec "$BASH" --login -i -c "docker run -ti -v $WIN_HOST_RAILS_WS:$CONTAINER_MOUNT_WS -w $CONTAINER_MOUNT_WS -p $PORT:$PORT $IMAGE_NAME //bin//bash -l -c 'bundle config --local path vendor/bundle'"
elif [[ ( $1 == "cli" ) && ( $2 == "nosync" ) ]]; then
exec "$BASH" --login -i -c "docker run -ti -v $WIN_HOST_RAILS_WS:$CONTAINER_RAILS_WS -w $CONTAINER_RAILS_WS -p $PORT:$PORT $IMAGE_NAME //bin//bash -l"
elif [ $1 == "cli" ]; then
exec "$BASH" --login -i -c "docker run -ti -v $WIN_HOST_RAILS_WS:$CONTAINER_MOUNT_WS -w $CONTAINER_MOUNT_WS -p $PORT:$PORT $IMAGE_NAME //bin//bash -l -c 'sudo cp -rf $CONTAINER_MOUNT_WS $CONTAINER_RAILS_WS;sudo chmod -R 777 $CONTAINER_MOUNT_WS;sudo chmod -R 777 $CONTAINER_RAILS_WS;sudo unison $CONTAINER_MOUNT_WS $CONTAINER_RAILS_WS -perms 0 -ignorecase false -links false -ignoreinodenumbers -auto -silent -ignore \"Path vendor/bundle\" -ignore \"Path .git\" -ignore \"Path .bundle\" -repeat 1 > /dev/null & sudo chmod -R 777 $CONTAINER_RAILS_WS;cd $CONTAINER_RAILS_WS;//bin//bash'"
elif [ $1 == "run" ]; then
exec "$BASH" --login -i -c "docker run -ti -v $WIN_HOST_RAILS_WS:$CONTAINER_MOUNT_WS -w $CONTAINER_MOUNT_WS -p $PORT:$PORT $IMAGE_NAME //bin//bash -l -c 'rm -r tmp/pids/server.pid;sudo cp -rf $CONTAINER_MOUNT_WS $CONTAINER_RAILS_WS;sudo unison $CONTAINER_MOUNT_WS $CONTAINER_RAILS_WS -perms 0 -ignorecase false -links false -ignoreinodenumbers -auto -silent -ignore \"Path vendor/bundle\" -ignore \"Path .git\" -ignore \"Path .bundle\" -repeat 1 > /dev/null & sudo chmod -R 777 $CONTAINER_RAILS_WS;cd $CONTAINER_RAILS_WS;rails s -b 0.0.0.0 -p $PORT'"
elif [ $1 == "build" ]; then
# Hack for Windows: we need to build bundles inside /tmp folder (building bundles inside shared project directory doesn't work), and then copy the gems into the vendor/bundle shared folder
exec "$BASH" --login -i -c "rm -rf $WIN_HOST_RAILS_WS/vendor/bundle;docker run -ti -v $WIN_HOST_RAILS_WS:$CONTAINER_RAILS_WS -w $CONTAINER_RAILS_WS -p $PORT:$PORT $IMAGE_NAME //bin//bash -l -c 'bundle install --path /tmp/tmp_bundle;sudo mv /tmp/tmp_bundle vendor/bundle;bundle config --local path vendor/bundle'"
elif [ $1 == "docker" ]; then
exec "$BASH" --login -i -c "cd $WIN_HOST_RAILS_WS;docker build -t $IMAGE_NAME ."
elif [ $1 == "clean" ]; then
exec "$BASH" --login -i -c "docker rmi -f $IMAGE_NAME"
elif [ $1 == "cclean" ]; then
exec "$BASH" --login -i -c "docker rm $(docker ps -a -q)"
fi
fi
unset IMAGE_NAME
unset WIN_HOST_RAILS_WS
unset CONTAINER_RAILS_WS
unset PORT
unset B2D_HOME
unset VBOX_HOME
unset FILENAME
unset PROCEED