Skip to content

Commit b599d59

Browse files
committed
Changes to code for JuliaEnterprise.
1 parent 24f56fe commit b599d59

17 files changed

+356
-45
lines changed

container/api/Dockerfile

+68-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
# Docker file for JuliaBox APIs
22
# Version:34
33

4-
FROM julialang/juliaboxpkgdist:v0.3.11
4+
### MDP FROM julialang/juliaboxpkgdist:v0.3.11
5+
### MDP
6+
FROM julialang/julia:v0.3.11
57

68
MAINTAINER Tanmay Mohapatra
79

@@ -11,19 +13,78 @@ RUN ln -fs /opt/julia/bin/julia /usr/bin/julia
1113
# create group and user with specific ids if required on systems where the user running juliabox is not the first user
1214
RUN groupadd juser \
1315
&& useradd -m -d /home/juser -s /bin/bash -g juser -G staff juser \
14-
&& echo "export HOME=/home/juser" >> /home/juser/.bashrc
16+
&& echo "export HOME=/home/juser" >> /home/juser/.bashrc \
17+
&& echo "export LD_LIBRARY_PATH=/home/juser:/usr/lib/x86_64-linux-gnu:/usr/lib" >> /home/juser/.bashrc
1518

1619
# add Julia nightly build
17-
RUN mkdir -p /opt/julia_0.4.0 && \
18-
curl -s -L https://status.julialang.org/download/linux-x86_64 | tar -C /opt/julia_0.4.0 -x -z --strip-components=1 -f -
19-
RUN ln -fs /opt/julia_0.4.0 /opt/julia_nightly
20+
## MDP RUN mkdir -p /opt/julia_0.4.0 && \
21+
## MDP curl -s -L https://status.julialang.org/download/linux-x86_64 | tar -C /opt/julia_0.4.0 -x -z --strip-components=1 -f -
22+
## MDP RUN ln -fs /opt/julia_0.4.0 /opt/julia_nightly
2023

2124
USER juser
2225
ENV HOME /home/juser
2326
ENV PATH /usr/local/texlive/2014/bin/x86_64-linux:/usr/local/bin:/usr/bin:/bin:/sbin:/usr/sbin:/opt/julia/bin
27+
ENV LD_LIBRARY_PATH $LD_LIBRARY_PATH:/home/juser
2428
WORKDIR /home/juser
2529

26-
RUN /opt/julia_0.4.0/bin/julia -e "try; Pkg.installed(\"JuliaWebAPI\"); catch; Pkg.clone(\"https://github.com/tanmaykm/JuliaWebAPI.jl\"); end"
27-
RUN /opt/julia_0.3.11/bin/julia -e "try; Pkg.installed(\"JuliaWebAPI\"); catch; Pkg.clone(\"https://github.com/tanmaykm/JuliaWebAPI.jl\"); end"
30+
## MDP RUN /opt/julia_0.4.0/bin/julia -e "try; Pkg.installed(\"JuliaWebAPI\"); catch; Pkg.clone(\"https://github.com/tanmaykm/JuliaWebAPI.jl\"); end"
31+
## MDP RUN /opt/julia_0.3.11/bin/julia -e "try; Pkg.installed(\"JuliaWebAPI\"); catch; Pkg.clone(\"https://github.com/mdpradeep/JuliaWebAPI.jl\"); end"
32+
## MDP check for Pkg.installed was preventing the new package to be pulled from git
33+
## RUN /opt/julia_0.3.11/bin/julia -e "Pkg.clone(\"https://github.com/mdpradeep/JuliaWebAPI.jl\")"
34+
## MDP RUN /opt/julia_0.3.11/bin/julia -e "Pkg.clone(\"https://github.com/JuliaDB/DBI.jl.git\")"
35+
## MDP RUN /opt/julia_0.3.11/bin/julia -e "Pkg.clone(\"DBI\")"
36+
RUN /opt/julia_0.3.11/bin/julia -e "Pkg.clone(\"DataFrames\")" ## required because of other dependencies !!!
37+
## MDP RUN /opt/julia_0.3.11/bin/julia -e "try; Pkg.installed(\"jd\"); catch; Pkg.clone(\"jd\"); end"
38+
39+
## MDP RUN mkdir -p /home/juser/.julia/v0.3
40+
RUN ls -lrt /home/juser/.julia/v0.3
41+
42+
ADD MySQL* /home/juser/MySQL
43+
## RUN cp -rf /home/juser/MySQL* /home/juser/.julia/v0.3/
44+
##
45+
ADD jd* /home/juser/jd
46+
## RUN cp -rf /home/juser/jd* /home/juser/.julia/v0.3/
47+
##
48+
ADD DBI* /home/juser/DBI
49+
## RUN cp -rf /home/juser/DBI* /home/juser/.julia/v0.3/
50+
##
51+
ADD Budget* /home/juser/Budget
52+
## RUN cp -rf /home/juser/Budget* /home/juser/.julia/v0.3/
53+
##
54+
ADD ODBC* /home/juser/ODBC
55+
## RUN cp -rf /home/juser/ODBC* /home/juser/.julia/v0.3/
56+
##
57+
ADD JuliaWebAPI /home/juser/JuliaWebAPI
58+
59+
## RUN rm -rf /home/juser/.julia/v0.3/JuliaWebAPI
60+
## RUN /opt/julia_0.3.11/bin/julia -e "Pkg.rm(\"JuliaWebAPI\")" ## Need to do this to get dependencies !!!
61+
## RUN /opt/julia_0.3.11/bin/julia -e "Pkg.clone(\"/home/juser/JuliaWebAPI\")" ## Need to do this to get dependencies !!!
62+
## MDP cloned above RUN cp -r /home/juser/JuliaWebAPI* /home/juser/.julia/v0.3/
63+
64+
ADD Match* /home/juser/Match
65+
## RUN cp -rf /home/juser/Match* /home/juser/.julia/v0.3/
66+
##
67+
ADD Compat* /home/juser/Compat
68+
## RUN cp -rf /home/juser/Compat* /home/juser/.julia/v0.3/
69+
##
70+
ADD Debug* /home/juser/Debug
71+
## RUN cp -rf /home/juser/Debug* /home/juser/.julia/v0.3/
72+
##
73+
ADD Dates* /home/juser/Dates
74+
## RUN cp -rf /home/juser/Dates* /home/juser/.julia/v0.3/
75+
76+
77+
ADD libmysqlclient.so* /home/juser/
78+
ADD libodbc.so* /home/juser/
79+
ADD libltdl.so.7* /home/juser/
80+
ADD clonePackages.sh /home/juser/clonePackages.sh
81+
82+
RUN ./clonePackages.sh
83+
84+
RUN mkdir -p /home/juser/logs && chmod 777 /home/juser/logs
85+
86+
VOLUME /home/juser/logs
87+
88+
## MDP RUN cp /home/juser/libmysqlclient.so* /usr/lib/
2889

2990
ENTRYPOINT ["julia", "-e", "using JuliaWebAPI; using Compat; process();"]

container/interactive/Dockerfile

+8-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
# Docker file for JuliaBox
22
# Version:34
33

4-
FROM julialang/juliaboxpkgdist:v0.3.11
4+
### MDP FROM julialang/juliaboxpkgdist:v0.3.11
55
# Switching the base to the bare julia image helps during JuliaBox development by reducing image size
6-
# FROM julialang/julia:v0.3.11
6+
7+
## MDP
8+
FROM julialang/julia:v0.3.11
79

810
MAINTAINER Tanmay Mohapatra
911

@@ -17,14 +19,14 @@ RUN groupadd juser \
1719
&& echo "export HOME=/home/juser" >> /home/juser/.bashrc
1820

1921
# add Julia nightly build
20-
RUN mkdir -p /opt/julia_0.4.0 && \
21-
curl -s -L https://status.julialang.org/download/linux-x86_64 | tar -C /opt/julia_0.4.0 -x -z --strip-components=1 -f -
22-
RUN ln -fs /opt/julia_0.4.0 /opt/julia_nightly
22+
## MDP RUN mkdir -p /opt/julia_0.4.0 && \
23+
## MDP curl -s -L https://status.julialang.org/download/linux-x86_64 | tar -C /opt/julia_0.4.0 -x -z --strip-components=1 -f -
24+
## MDP RUN ln -fs /opt/julia_0.4.0 /opt/julia_nightly
2325

2426
# JuliaBox package bundle shall be mounted at /opt/julia_packages.
2527
# They are added to LOAD_PATH through respective juliarc.jl scripts.
2628
RUN mkdir /opt/julia_packages
27-
RUN echo 'push!(LOAD_PATH, "/opt/julia_packages/.julia/v0.4/")' >> /opt/julia_0.4.0/etc/julia/juliarc.jl
29+
## MDP RUN echo 'push!(LOAD_PATH, "/opt/julia_packages/.julia/v0.4/")' >> /opt/julia_0.4.0/etc/julia/juliarc.jl
2830
RUN echo 'push!(LOAD_PATH, "/opt/julia_packages/.julia/v0.3/")' >> /opt/julia_0.3.11/etc/julia/juliarc.jl
2931

3032
# Data volumes shall be mounted at /mnt/data

container/interactive/mk_user_home.sh

+40-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ fi
99
DATA_LOC=$1
1010
JUSER_HOME=/tmp/juser
1111
PKG_DIR=/tmp/jpkg
12+
PKG_DIR_CUSTOM=/tmp/jpkg_custom
13+
14+
1215
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
1316
#SUDO_JUSER="sudo -u#1000 -g#1000"
1417
SUDO_JUSER=""
@@ -20,8 +23,10 @@ function error_exit {
2023

2124
sudo rm -rf ${JUSER_HOME}
2225
sudo rm -rf ${PKG_DIR}
26+
sudo rm -rf ${PKG_DIR_CUSTOM}
2327
mkdir -p ${JUSER_HOME}
2428
mkdir -p ${PKG_DIR}
29+
mkdir -p ${PKG_DIR_CUSTOM}
2530
mkdir -p ${JUSER_HOME}/.juliabox
2631
mkdir -p ${PKG_DIR}/jimg/stable
2732
mkdir -p ${PKG_DIR}/jimg/nightly
@@ -30,10 +35,39 @@ cp ${DIR}/setup_julia.sh ${JUSER_HOME}
3035
cp ${DIR}/jimg.jl ${JUSER_HOME}
3136
cp ${DIR}/mkjimg.jl ${JUSER_HOME}
3237

38+
### MDP
39+
40+
### TODO: Move the packages to a better location than home !
41+
LOCAL_PACKAGES="/home/vagrant/DataFrames \
42+
/home/vagrant/JuliaBox/container/api/Compat \
43+
/home/vagrant/JuliaBox/container/api/Debug \
44+
/home/vagrant/JuliaBox/container/api/DBI \
45+
/home/vagrant/JuliaBox/container/api/Dates \
46+
/home/vagrant/JuliaBox/container/api/ODBC \
47+
/home/vagrant/JuliaBox/container/api/Match \
48+
/home/vagrant/JuliaBox/container/api/JuliaWebAPI \
49+
/home/vagrant/JuliaBox/container/api/MySQL"
50+
## /home/vagrant/MySQL"
51+
## /home/vagrant/JuliaBox/container/api/Budget"
52+
## /home/vagrant/JustDial/Budget"
53+
## /home/vagrant/JustDial/CalculateBudget"
54+
55+
for pkg in ${LOCAL_PACKAGES}
56+
do
57+
echo ""
58+
echo "Copying local package $pkg to Julia stable"
59+
cp -rf $pkg ${PKG_DIR_CUSTOM}
60+
done
61+
### MDP
62+
3363
sudo chown -R 1000:1000 ${JUSER_HOME}
3464
sudo chown -R 1000:1000 ${PKG_DIR}
35-
docker run -i -v ${JUSER_HOME}:/home/juser -v ${PKG_DIR}:/opt/julia_packages -e "JULIA_PKGDIR=/opt/julia_packages/.julia" --entrypoint="/home/juser/setup_julia.sh" juliabox/juliabox:latest || error_exit "Could not run juliabox image"
36-
docker run -i -v ${JUSER_HOME}:/home/juser -v ${PKG_DIR}:/opt/julia_packages -e "JULIA_PKGDIR=/opt/julia_packages/.julia" --user=root --workdir=/home/juser --entrypoint="julia" juliabox/juliabox:latest mkjimg.jl || error_exit "Could not run juliabox image"
65+
docker run -i -v ${JUSER_HOME}:/home/juser -v ${PKG_DIR_CUSTOM}:/opt/julia_packages_custom -v ${PKG_DIR}:/opt/julia_packages -e "JULIA_PKGDIR=/opt/julia_packages/.julia" --entrypoint="/home/juser/setup_julia.sh" juliabox/juliabox:latest || error_exit "Could not run juliabox image"
66+
# MDP docker run -i -v ${JUSER_HOME}:/home/juser -v ${PKG_DIR}:/opt/julia_packages -e "JULIA_PKGDIR=/opt/julia_packages/.julia" --user=root --workdir=/home/juser --entrypoint="julia" juliabox/juliabox:latest mkjimg.jl || error_exit "Could not run juliabox image"
67+
68+
retVal = $?
69+
70+
echo " =========================================== The ret val is ${retVal} ================================================= "
3771

3872
## precompilation fails mysteriously sometimes. retry a couple of times to rule out spurious errors
3973
#n=0
@@ -52,6 +86,10 @@ docker run -i -v ${JUSER_HOME}:/home/juser -v ${PKG_DIR}:/opt/julia_packages -e
5286

5387
sudo chown -R 1000:1000 ${JUSER_HOME}
5488
sudo chown -R 1000:1000 ${PKG_DIR}
89+
90+
sudo chown -R juser:juser ${JUSER_HOME}/logs ### MDP
91+
sudo chmod -R 777 ${JUSER_HOME}/logs ### MDP
92+
5593
${SUDO_JUSER} rm ${JUSER_HOME}/setup_julia.sh ${JUSER_HOME}/build_sysimg.jl ${JUSER_HOME}/jimg.jl ${JUSER_HOME}/mkjimg.jl
5694

5795
${SUDO_JUSER} cp ${DIR}/IJulia/ipython_notebook_config.py ${JUSER_HOME}/.ipython/profile_default/ipython_notebook_config.py

container/interactive/setup_julia.sh

+63-23
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
julia -e 'Pkg.init()'
44

55
# Install packages for Julia stable
6-
DEFAULT_PACKAGES="IJulia Gadfly PyPlot SIUnits DataStructures HDF5 MAT \
7-
Iterators NumericExtensions SymPy Interact Roots \
8-
DataFrames RDatasets Distributions SVM Clustering GLM \
9-
Optim JuMP GLPKMathProgInterface Clp NLopt Ipopt \
10-
Cairo GraphViz \
11-
Images ImageView WAV ODE Sundials LinearLeastSquares \
12-
BayesNets PGFPlots GraphLayout \
13-
Stan Patchwork Quandl Lazy QuantEcon MixedModels Escher"
6+
DEFAULT_PACKAGES="IJulia" # Gadfly PyPlot SIUnits DataStructures HDF5 MAT \
7+
#Iterators NumericExtensions SymPy Interact Roots \
8+
#DataFrames RDatasets Distributions SVM Clustering GLM \
9+
#Optim JuMP GLPKMathProgInterface Clp NLopt Ipopt \
10+
#Cairo GraphViz \
11+
#Images ImageView WAV ODE Sundials LinearLeastSquares \
12+
#BayesNets PGFPlots GraphLayout \
13+
#Stan Patchwork Quandl Lazy QuantEcon MixedModels Escher"
1414

1515
for pkg in ${DEFAULT_PACKAGES}
1616
do
@@ -19,9 +19,11 @@ do
1919
julia -e "Pkg.add(\"$pkg\")"
2020
done
2121

22-
INTERNAL_PACKAGES="https://github.com/tanmaykm/JuliaBoxUtils.jl.git \
23-
https://github.com/tanmaykm/JuliaWebAPI.jl.git \
24-
https://github.com/shashi/Homework.jl.git"
22+
23+
INTERNAL_PACKAGES="https://github.com/tanmaykm/JuliaBoxUtils.jl.git" # \
24+
## https://github.com/JuliaDB/DBI.jl.git \
25+
## https://github.com/mdpradeep/JuliaWebAPI.jl.git \
26+
## https://github.com/shashi/Homework.jl.git"
2527

2628
for pkg in ${INTERNAL_PACKAGES}
2729
do
@@ -36,18 +38,52 @@ then
3638
julia -e "Pkg.checkout(\"Interact\")"
3739
fi
3840

41+
### MDP
42+
## echo "Listing source and target ...."
43+
## ls -l /opt/julia_packages_custom/
44+
45+
46+
LOCAL_PACKAGES="/opt/julia_packages_custom/DataFrames \
47+
/opt/julia_packages_custom/DBI \
48+
/opt/julia_packages_custom/Debug \
49+
/opt/julia_packages_custom/Match \
50+
/opt/julia_packages_custom/Dates \
51+
/opt/julia_packages_custom/ODBC \
52+
/opt/julia_packages_custom/JuliaWebAPI \
53+
/opt/julia_packages_custom/MySQL" # \
54+
## /opt/julia_packages_custom/Budget"
55+
## Already part of IJulia ... /opt/julia_packages_custom/Compat \
56+
57+
for pkg in ${LOCAL_PACKAGES}
58+
do
59+
echo ""
60+
echo "Copying local package $pkg to Julia stable"
61+
## cp -rf $pkg /home/juser/.julia/v0.3.11/
62+
julia -e "Pkg.clone(\"$pkg\")"
63+
done
64+
65+
echo "Inspecting julia package status !!!"
66+
julia -e "Pkg.status()"
67+
echo "Inspecting julia package status done !!!"
68+
69+
### MDP
70+
## exit
71+
3972
echo ""
4073
echo "Creating Julia stable package list..."
41-
julia -e 'println("JULIA_HOME: $JULIA_HOME\n"); versioninfo(); println(""); Pkg.status()' > /opt/julia_packages/stable_packages.txt
74+
julia -e 'println("JULIA_HOME: $JULIA_HOME\n"); versioninfo(); println(""); Pkg.status()' > /opt/julia_packages/stable_packages.txt 2>&1
75+
## MDP julia -e 'println("JULIA_HOME: $JULIA_HOME\n"); versioninfo(); println(""); Pkg.status()' > /opt/julia_packages/stable_packages.txt
4276
#echo ""
4377
#echo "Running package tests..."
4478
#julia -e "Pkg.test()" > /opt/julia_packages/packages_test_result.txt
4579

4680

47-
/opt/julia_nightly/bin/julia -e 'Pkg.init()'
81+
## MDP /opt/julia_nightly/bin/julia -e 'Pkg.init()'
4882

4983
# Install packages for Julia nightly
50-
JULIA_NIGHTLY_DEFAULT_PACKAGES="IJulia"
84+
## MDP JULIA_NIGHTLY_DEFAULT_PACKAGES="IJulia"
85+
## MDP
86+
JULIA_NIGHTLY_DEFAULT_PACKAGES=""
5187

5288
for pkg in ${JULIA_NIGHTLY_DEFAULT_PACKAGES}
5389
do
@@ -56,9 +92,10 @@ do
5692
/opt/julia_nightly/bin/julia -e "Pkg.add(\"$pkg\")"
5793
done
5894

59-
JULIA_NIGHTLY_INTERNAL_PACKAGES="https://github.com/tanmaykm/JuliaBoxUtils.jl.git \
60-
https://github.com/tanmaykm/JuliaWebAPI.jl.git \
61-
https://github.com/shashi/Homework.jl.git"
95+
## MDP JULIA_NIGHTLY_INTERNAL_PACKAGES="https://github.com/tanmaykm/JuliaBoxUtils.jl.git \
96+
## MDP https://github.com/tanmaykm/JuliaWebAPI.jl.git \
97+
## MDP https://github.com/shashi/Homework.jl.git"
98+
JULIA_NIGHTLY_INTERNAL_PACKAGES=""
6299

63100
for pkg in ${JULIA_NIGHTLY_INTERNAL_PACKAGES}
64101
do
@@ -67,12 +104,15 @@ do
67104
/opt/julia_nightly/bin/julia -e "Pkg.clone(\"$pkg\")"
68105
done
69106

70-
if [[ $JULIA_NIGHTLY_DEFAULT_PACKAGES == *" Interact "* ]]
71-
then
72-
echo "Checking out Interact package for IPython 3 compatibility"
73-
/opt/julia_nightly/bin/julia -e "Pkg.checkout(\"Interact\")"
74-
fi
107+
## MDP if [[ $JULIA_NIGHTLY_DEFAULT_PACKAGES == *" Interact "* ]]
108+
## MDP then
109+
## MDP echo "Checking out Interact package for IPython 3 compatibility"
110+
## MDP /opt/julia_nightly/bin/julia -e "Pkg.checkout(\"Interact\")"
111+
## MDP fi
112+
113+
## MDP
114+
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/juser
75115

76116
echo ""
77117
echo "Creating Julia nightly package list..."
78-
/opt/julia_nightly/bin/julia -e 'println("JULIA_HOME: $JULIA_HOME\n"); versioninfo(); println(""); Pkg.status()' > /opt/julia_packages/nightly_packages.txt
118+
## MDP /opt/julia_nightly/bin/julia -e 'println("JULIA_HOME: $JULIA_HOME\n"); versioninfo(); println(""); Pkg.status()' > /opt/julia_packages/nightly_packages.txt

engine/conf/tornado.conf.tpl

+3-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@
3434
# Maximum number of requests in queue before rejecting new requests
3535
"numapilocalmax" : 5,
3636
# Seconds to wait before force deleting a non-responding container
37-
"expire" : 1800
37+
"expire" : 1800,
38+
# Host folder where API containers can write logs. This is mounted as /home/juser/logs in the container.
39+
"log_location" : "/jboxengine/logs/api"
3840
},
3941

4042
# interactive container configuration

engine/src/juliabox/api/api_connector.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ def _release(self):
5555

5656
def conn_send_recv(self, send_data, on_recv, on_timeout, timeout=None):
5757
stream = zmqstream.ZMQStream(self.sock)
58+
APIConnector.log_debug("stream is %s", stream)
5859
loop = ioloop.IOLoop.instance()
5960
if timeout is None:
6061
timeout = self.timeout
@@ -76,19 +77,25 @@ def _on_recv(msg):
7677
self.timeout_callback = None
7778
stream.stop_on_recv()
7879
self._release()
80+
## MDP self.log_debug("MDP before msg is %s", msg)
7981
msg = json.loads(msg[0])
82+
## MDP self.log_debug("MDP msg is %s", msg)
8083
if on_recv is not None:
8184
on_recv(msg)
8285

8386
self.log_debug("%s: making call with timeout %r", self.debug_str(), timeout)
8487
self.timeout_callback = loop.add_timeout(timeout, _on_timeout)
8588
stream.on_recv(_on_recv)
8689
self.queue.incr_outstanding(1)
90+
## MDP self.log_debug("MDP data sent is %s", send_data)
8791
self.sock.send(send_data)
8892

8993
@staticmethod
9094
def send_recv(api_name, cmd, args=None, vargs=None, on_recv=None, on_timeout=None, on_overload=None, timeout=None):
95+
## MDP
96+
## APIConnector.log_debug("%s: calling with cmd %s , args %s and vargs = %s", api_name, cmd, args, vargs)
9197
send_data = APIConnector.make_req(cmd, args=args, vargs=vargs)
98+
## MDP APIConnector.log_debug("data created is %s ", send_data)
9299
api = APIConnector._get_conn(api_name)
93100

94101
if api.queue.mean_outstanding >= APIQueue.BUFFER_SZ:
@@ -110,4 +117,4 @@ def make_req(cmd, args=None, vargs=None):
110117
if (vargs is not None) and (len(vargs) > 0):
111118
req['vargs'] = vargs
112119

113-
return json.dumps(req)
120+
return json.dumps(req)

0 commit comments

Comments
 (0)