Refactor folder structure.
[sim/o1-interface.git] / ntsimulator / deploy / nts-manager / Dockerfile
1 FROM ubuntu:18.04 AS builder
2
3 LABEL maintainer="alexandru.stancu@highstreet-technologies.com"
4
5 ENV NETCONF_BASE=40000
6 ENV NTS_IP="127.0.0.1"
7 ENV SCRIPTS_DIR=/opt/dev/scripts
8 ENV DOCKER_ENGINE_VERSION="1.40"
9 ENV MODELS_IMAGE="ntsim_oran"
10
11 RUN \
12       apt-get update && apt-get install -y \
13       # general tools
14       git \
15       cmake \
16       build-essential \
17       vim \
18       supervisor \
19       # libyang
20       libpcre3-dev \
21       pkg-config \
22       # sysrepo
23       libavl-dev \
24       libev-dev \
25       libprotobuf-c-dev \
26       protobuf-c-compiler \
27       # netopeer2 \
28       libssh-dev \
29       libssl-dev \
30       # bindings
31       swig \
32       python-dev \
33       libcurl4 \
34       libcurl4-openssl-dev \
35       curl \
36       bc \
37       python-setuptools \
38       python-pip
39
40 # add netconf user
41 RUN \
42       adduser --system netconf && \
43       echo "netconf:netconf" | chpasswd
44
45 # generate ssh keys for netconf user
46 RUN \
47       mkdir -p /home/netconf/.ssh && \
48       ssh-keygen -A && \
49       ssh-keygen -t dsa -P '' -f /home/netconf/.ssh/id_dsa && \
50       cat /home/netconf/.ssh/id_dsa.pub > /home/netconf/.ssh/authorized_keys && \
51 #echo "Host *\n    StrictHostKeyChecking accept-new" >> /home/netconf/.ssh/config
52       echo "    StrictHostKeyChecking no" >> /etc/ssh/ssh_config && \
53       mkdir -p /root/.ssh && \
54       cat /home/netconf/.ssh/id_dsa.pub > /root/.ssh/authorized_keys
55        
56 # use /opt/dev as working directory
57 RUN mkdir /opt/dev
58 WORKDIR /opt/dev
59
60 # libcjson
61 RUN \
62       git clone https://github.com/Melacon/cJSON.git && \
63       cd cJSON && mkdir build && cd build && \
64       cmake .. -DENABLE_CJSON_UTILS=On -DENABLE_CJSON_TEST=Off -DCMAKE_INSTALL_PREFIX=/usr .. && \
65       make -j2 && \
66       make install && \
67       ldconfig
68
69 # libyang
70 RUN \
71       git clone https://github.com/Melacon/libyang.git && \
72       cd libyang && mkdir build && cd build && \
73       cmake -DCMAKE_BUILD_TYPE:String="Release" -DENABLE_BUILD_TESTS=OFF .. && \
74       make -j2 && \
75       make install && \
76       ldconfig
77
78 # sysrepo
79 RUN \
80       git clone https://github.com/Melacon/sysrepo.git && \
81       sed -i 's/#define MAX_BLOCKS_AVAIL_FOR_ALLOC    3/#define MAX_BLOCKS_AVAIL_FOR_ALLOC    6/g' ./sysrepo/src/common/sr_mem_mgmt.h && \
82       cd sysrepo && mkdir build && cd build && \
83       cmake -DCMAKE_BUILD_TYPE:String="Release" -DENABLE_TESTS=OFF -DREPOSITORY_LOC:PATH=/etc/sysrepo -DREQUEST_TIMEOUT=60 -DOPER_DATA_PROVIDE_TIMEOUT=60 .. && \
84       make -j2 && \
85       make install && \
86       ldconfig
87
88 # libnetconf2
89 RUN \
90       git clone https://github.com/Melacon/libnetconf2.git && \
91       cd libnetconf2 && mkdir build && cd build && \
92       cmake -DCMAKE_BUILD_TYPE:String="Release" -DENABLE_BUILD_TESTS=OFF .. && \
93       make -j2 && \
94       make install && \
95       ldconfig
96
97 # keystore
98 RUN \
99       git clone https://github.com/Melacon/Netopeer2.git && \
100       cd Netopeer2 && \
101       cd keystored && mkdir build && cd build && \
102       cmake -DCMAKE_BUILD_TYPE:String="Release" .. && \
103       make -j2 && \
104       make install && \
105       ldconfig
106
107 # netopeer2
108 RUN \
109       cd /opt/dev/Netopeer2/server && mkdir build && cd build && \
110       cmake -DCMAKE_BUILD_TYPE:String="Release" .. && \
111       make -j2 && \
112       make install && \
113       cd ../../cli && mkdir build && cd build && \
114       cmake -DCMAKE_BUILD_TYPE:String="Release" .. && \
115       make -j2 && \
116       make install
117
118 # NTSimulator Manager
119 COPY . /opt/dev/ntsimulator
120 COPY ./deploy/nts-manager/CMakeLists.txt /opt/dev/ntsimulator/CMakeLists.txt
121 RUN \
122       cd /opt/dev && \
123       cd ntsimulator && mkdir build  && cd build && \
124       cmake .. && \
125       make -j2 && \
126       make install
127
128
129 # Second stage
130 FROM ubuntu:18.04  
131
132 LABEL maintainer="alexandru.stancu@highstreet-technologies.com"
133
134 ENV NETCONF_BASE=40000
135 ENV NTS_IP="127.0.0.1"
136 ENV SCRIPTS_DIR=/opt/dev/scripts
137 ENV DOCKER_ENGINE_VERSION="1.40"
138 ENV MODELS_IMAGE="ntsim_oran"
139
140 RUN \
141       apt-get update && apt-get install -y supervisor
142
143 # add netconf user
144 RUN \
145       adduser --system netconf && \
146       echo "netconf:netconf" | chpasswd
147
148 # generate ssh keys for netconf user
149 RUN \
150       mkdir -p /home/netconf/.ssh
151
152 COPY --from=builder /home/netconf/.ssh /home/netconf/.ssh
153 COPY --from=builder /usr/local/lib /usr/local/lib
154 COPY --from=builder /usr/local/bin /usr/local/bin
155 COPY --from=builder /usr/local/include /usr/local/include
156 COPY --from=builder /usr/lib/libavl.so /usr/lib/libavl.so
157 COPY --from=builder /usr/lib/libavl.so.1 /usr/lib/libavl.so.1
158 COPY --from=builder /usr/lib/x86_64-linux-gnu/libev.so /usr/lib/x86_64-linux-gnu/libev.so
159 COPY --from=builder /usr/lib/x86_64-linux-gnu/libev.so.4 /usr/lib/x86_64-linux-gnu/libev.so.4
160 COPY --from=builder /usr/lib/x86_64-linux-gnu/libcurl.so.4 /usr/lib/x86_64-linux-gnu/libcurl.so.4
161 COPY --from=builder /usr/lib/x86_64-linux-gnu/libcurl.so /usr/lib/x86_64-linux-gnu/libcurl.so
162 COPY --from=builder /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4 /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4
163 COPY --from=builder /usr/lib/x86_64-linux-gnu/libcjson_utils.so.1 /usr/lib/x86_64-linux-gnu/libcjson_utils.so.1
164 COPY --from=builder /usr/lib/x86_64-linux-gnu/libcjson_utils.so /usr/lib/x86_64-linux-gnu/libcjson_utils.so
165 COPY --from=builder /usr/lib/x86_64-linux-gnu/libcjson.so.1 /usr/lib/x86_64-linux-gnu/libcjson.so.1 
166 COPY --from=builder /usr/lib/x86_64-linux-gnu/libcjson.so /usr/lib/x86_64-linux-gnu/libcjson.so
167 COPY --from=builder /usr/lib/x86_64-linux-gnu/libprotobuf.so.10 /usr/lib/x86_64-linux-gnu/libprotobuf.so.10
168 COPY --from=builder /usr/lib/x86_64-linux-gnu/libprotobuf-c.so.1 /usr/lib/x86_64-linux-gnu/libprotobuf-c.so.1
169 COPY --from=builder /usr/lib/x86_64-linux-gnu/libprotobuf-c.so /usr/lib/x86_64-linux-gnu/libprotobuf-c.so
170 COPY --from=builder /usr/lib/x86_64-linux-gnu/libssh_threads.so.4 /usr/lib/x86_64-linux-gnu/libssh_threads.so.4
171 COPY --from=builder /usr/lib/x86_64-linux-gnu/libssh_threads.so /usr/lib/x86_64-linux-gnu/libssh_threads.so
172 COPY --from=builder /usr/lib/x86_64-linux-gnu/libssh.so.4 /usr/lib/x86_64-linux-gnu/libssh.so.4
173 COPY --from=builder /usr/lib/x86_64-linux-gnu/libssh.so /usr/lib/x86_64-linux-gnu/libssh.so
174 COPY --from=builder /usr/lib/x86_64-linux-gnu/libnghttp2.so.14 /usr/lib/x86_64-linux-gnu/libnghttp2.so.14
175 COPY --from=builder /usr/lib/x86_64-linux-gnu/librtmp.so.1 /usr/lib/x86_64-linux-gnu/librtmp.so.1
176 COPY --from=builder /usr/lib/x86_64-linux-gnu/libpsl.so.5 /usr/lib/x86_64-linux-gnu/libpsl.so.5
177 COPY --from=builder /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2
178 COPY --from=builder /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2 /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2
179 COPY --from=builder /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2
180 COPY --from=builder /usr/lib/x86_64-linux-gnu/libkrb5.so.3 /usr/lib/x86_64-linux-gnu/libkrb5.so.3
181 COPY --from=builder /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 /usr/lib/x86_64-linux-gnu/libk5crypto.so.3
182 COPY --from=builder /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 /usr/lib/x86_64-linux-gnu/libkrb5support.so.0
183 COPY --from=builder /usr/lib/x86_64-linux-gnu/libsasl2.so.2 /usr/lib/x86_64-linux-gnu/libsasl2.so.2
184 COPY --from=builder /usr/lib/x86_64-linux-gnu/libgssapi.so.3 /usr/lib/x86_64-linux-gnu/libgssapi.so.3
185 COPY --from=builder /usr/lib/x86_64-linux-gnu/libheimntlm.so.0 /usr/lib/x86_64-linux-gnu/libheimntlm.so.0
186 COPY --from=builder /usr/lib/x86_64-linux-gnu/libkrb5.so.26 /usr/lib/x86_64-linux-gnu/libkrb5.so.26
187 COPY --from=builder /usr/lib/x86_64-linux-gnu/libasn1.so.8 /usr/lib/x86_64-linux-gnu/libasn1.so.8
188 COPY --from=builder /usr/lib/x86_64-linux-gnu/libhcrypto.so.4 /usr/lib/x86_64-linux-gnu/libhcrypto.so.4
189 COPY --from=builder /usr/lib/x86_64-linux-gnu/libroken.so.18 /usr/lib/x86_64-linux-gnu/libroken.so.18
190 COPY --from=builder /usr/lib/x86_64-linux-gnu/libwind.so.0 /usr/lib/x86_64-linux-gnu/libwind.so.0
191 COPY --from=builder /usr/lib/x86_64-linux-gnu/libheimbase.so.1 /usr/lib/x86_64-linux-gnu/libheimbase.so.1
192 COPY --from=builder /usr/lib/x86_64-linux-gnu/libhx509.so.5 /usr/lib/x86_64-linux-gnu/libhx509.so.5
193
194 COPY --from=builder /lib/x86_64-linux-gnu/libkeyutils.so.1 /lib/x86_64-linux-gnu/libkeyutils.so.1
195 COPY --from=builder /etc/sysrepo /etc/sysrepo
196 COPY --from=builder /var/run /var/run
197
198 COPY --from=builder /usr/local/etc/keystored/keys/ssh_host_rsa_key.pem /usr/local/etc/keystored/keys/ssh_host_rsa_key.pem
199 COPY --from=builder /usr/local/etc/keystored/keys/ssh_host_rsa_key.pem.pub /usr/local/etc/keystored/keys/ssh_host_rsa_key.pem.pub
200 COPY --from=builder /usr/local/share/libnetconf2 /usr/local/share/libnetconf2
201
202 RUN ldconfig
203
204 COPY ./deploy/nts-manager/supervisord.conf /etc/supervisord.conf
205           
206 ARG BUILD_DATE
207 LABEL build-date=$BUILD_DATE
208
209 ENV EDITOR vim
210 EXPOSE 830
211
212 CMD ["sh", "-c", "/usr/bin/supervisord -c /etc/supervisord.conf"]