forked from pf-robotics/kachaka-api
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile.ros2
229 lines (182 loc) · 8.23 KB
/
Dockerfile.ros2
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
# syntax=docker/dockerfile:1.6.0
#=============================================================================
FROM amd64/ros:humble-ros-core-jammy AS kachaka-api-base-amd64
#-----------------------------------------------------------------------------
FROM arm64v8/ros:humble-ros-core-jammy AS kachaka-api-base-arm64
#=============================================================================
FROM kachaka-api-base-${TARGETARCH} AS kachaka-api-base
COPY --from=impactaky/mimic-cross:host-jammy /usr/bin/qemu-aarch64-static /usr/bin
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get -y install --no-install-recommends \
dumb-init \
language-pack-ja-base \
libgrpc++ \
&& \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
#=============================================================================
FROM kachaka-api-base AS kachaka-api-rosdep
RUN apt-get update && \
apt-get -y install --no-install-recommends \
python3-rosdep \
&& \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN rosdep init
RUN rosdep update
RUN mkdir -p /ws/src
WORKDIR /ws
COPY ros2/kachaka_description/package.xml /ws/src/kachaka_description/package.xml
COPY ros2/kachaka_grpc_ros2_bridge/package.xml /ws/src/kachaka_grpc_ros2_bridge/package.xml
COPY ros2/kachaka_interfaces/package.xml /ws/src/kachaka_interfaces/package.xml
COPY ros2/demos/kachaka_follow/package.xml /ws/src/kachaka_follow/package.xml
COPY ros2/demos/kachaka_smart_speaker/package.xml /ws/src/kachaka_smart_speaker/package.xml
COPY ros2/demos/kachaka_speak/package.xml /ws/src/kachaka_speak/package.xml
COPY ros2/demos/kachaka_vision/package.xml /ws/src/kachaka_vision/package.xml
RUN rosdep keys --ignore-src --from-paths src \
| xargs rosdep resolve --rosdistro humble --os=ubuntu:jammy \
| grep -v '^#' \
| sed 's/ \+/\n/g'\
| sort \
> /rosdep-package-list.txt
#=============================================================================
FROM kachaka-api-base AS kachaka-api-ros-base
COPY --from=kachaka-api-rosdep /rosdep-package-list.txt /tmp/rosdep-package-list.txt
RUN cat /tmp/rosdep-package-list.txt \
&& apt-get update \
&& cat /tmp/rosdep-package-list.txt | xargs apt-get install -y --no-install-recommends \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
#=============================================================================
FROM kachaka-api-base AS kachaka-api-protogen
RUN apt-get update && \
apt-get -y install --no-install-recommends \
protobuf-compiler-grpc \
&& \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
COPY protos/kachaka-api.proto /ws/protos/
WORKDIR /ws
RUN mkdir -p \
/ws/gen-src/cpp \
&& protoc -I protos \
--grpc_out=/ws/gen-src/cpp \
--plugin=protoc-gen-grpc=/usr/bin/grpc_cpp_plugin \
--cpp_out=/ws/gen-src/cpp \
protos/*.proto
#=============================================================================
FROM kachaka-api-ros-base AS kachaka-api-build-base-arm64-arm64
#-----------------------------------------------------------------------------
FROM kachaka-api-ros-base AS kachaka-api-build-base-amd64-amd64
#-----------------------------------------------------------------------------
FROM kachaka-api-ros-base AS kachaka-api-build-base-amd64-arm64
COPY --from=impactaky/mimic-cross:host-jammy / /host
RUN mv /host/mimic-cross-target /mimic-cross
RUN /mimic-cross/setup.sh
#-----------------------------------------------------------------------------
FROM kachaka-api-build-base-${BUILDARCH}-${TARGETARCH} AS kachaka-api-build-base
#=============================================================================
FROM kachaka-api-build-base AS kachaka-api-build-grpc-ros2-bridge
ARG PREFIX=/opt/kachaka
RUN apt-get update && \
apt-get -y install --no-install-recommends \
libprotobuf-dev \
libgrpc++-dev \
nlohmann-json3-dev \
ros-dev-tools \
&& \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
WORKDIR /ws
COPY ros2/kachaka_description /ws/src/kachaka_description
COPY ros2/kachaka_grpc_ros2_bridge /ws/src/kachaka_grpc_ros2_bridge
COPY ros2/kachaka_interfaces /ws/src/kachaka_interfaces
COPY --from=kachaka-api-protogen /ws/gen-src/cpp /ws/src/kachaka_grpc_ros2_bridge/gen-src
RUN . /opt/ros/humble/setup.sh && \
colcon build --install-base ${PREFIX} --merge-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Release
#=============================================================================
FROM kachaka-api-build-base AS kachaka-api-build-ros2-demos
ARG PREFIX=/opt/kachaka
RUN apt-get update && \
apt-get -y install --no-install-recommends \
ros-dev-tools \
&& \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
WORKDIR /ws
COPY --from=kachaka-api-build-grpc-ros2-bridge ${PREFIX} ${PREFIX}
COPY ros2/demos/kachaka_follow /ws/src/kachaka_follow
COPY ros2/demos/kachaka_smart_speaker /ws/src/kachaka_smart_speaker
COPY ros2/demos/kachaka_speak /ws/src/kachaka_speak
COPY ros2/demos/kachaka_vision /ws/src/kachaka_vision
RUN . /opt/kachaka/setup.sh && \
colcon build --install-base ${PREFIX} --merge-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Release
#=============================================================================
FROM kachaka-api-ros-base AS kachaka-grpc-ros2-bridge
ARG PREFIX=/opt/kachaka
COPY tools/ros2_bridge/env.sh /opt/kachaka/env.sh
COPY --from=kachaka-api-build-grpc-ros2-bridge ${PREFIX} ${PREFIX}
ARG BUILD_VERSION="no-version-specified"
ENV BUILD_VERSION=${BUILD_VERSION}
ENTRYPOINT ["dumb-init", "--rewrite", "15:2", "--", "/opt/kachaka/env.sh"]
#=============================================================================
FROM kachaka-api-ros-base AS kachaka-ros2-demos
ARG PREFIX=/opt/kachaka
COPY --from=kachaka-api-build-ros2-demos ${PREFIX} ${PREFIX}
ARG BUILD_VERSION="no-version-specified"
ENV BUILD_VERSION=${BUILD_VERSION}
ENTRYPOINT ["dumb-init", "--rewrite", "15:2", "--", "/opt/kachaka/env.sh"]
#=============================================================================
FROM ubuntu:22.04 AS kachaka-playground-base-amd64
#-----------------------------------------------------------------------------
# This image was created by executing the following command within https://github.com/multiarch/ubuntu-core
# sudo ./update.sh -a arm64 -v jammy -q aarch64 -u v6.1.0-5 -d docker.io/multiarch/ubuntu-core -t arm64
FROM asia-northeast1-docker.pkg.dev/pfr-flexci/tmp/multiarch/ubuntu-core:KEEP-arm64-jammy AS kachaka-playground-base-arm64
#-----------------------------------------------------------------------------
FROM kachaka-playground-base-${TARGETARCH} AS kachaka-playground
ENV DEBIAN_FRONTEND=noninteractive
# NOTE: gcc is required for installing jupyterlab install
RUN apt-get update && \
apt-get -y install --no-install-recommends \
curl \
gcc \
git \
iproute2 \
libglib2.0-0 \
nano \
net-tools \
openssh-server \
python3-dev \
python3-pip \
python3-venv \
rsync \
unzip \
vim-tiny \
wget \
&& \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN pip3 install jupyterlab grpcio-tools ipywidgets
RUN sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
RUN mkdir /var/run/sshd
# TODO(nozaki) Change password
RUN adduser kachaka --uid 5000
RUN echo kachaka:kachaka | chpasswd
ARG PROTO_DIR=/usr/local/share/kachaka/protos
ARG PYTHON_PACKAGE_DIR=/usr/local/lib/python3.10/dist-packages/
COPY protos/kachaka-api.proto ${PROTO_DIR}/kachaka-api.proto
RUN python3 -m grpc_tools.protoc \
-I${PROTO_DIR} \
--python_out=${PYTHON_PACKAGE_DIR} \
--pyi_out=${PYTHON_PACKAGE_DIR} \
--grpc_python_out=${PYTHON_PACKAGE_DIR} \
${PROTO_DIR}/*.proto
# These lines should come at the end of the kachaka-playground
WORKDIR /home/kachaka
USER kachaka
#=============================================================================
FROM scratch AS kachaka-api-dummy
COPY --from=kachaka-grpc-ros2-bridge /etc/os-release /dummy-copy-for-build
COPY --from=kachaka-ros2-demos /etc/os-release /dummy-copy-for-build
COPY --from=kachaka-playground /etc/os-release /dummy-copy-for-build