Skip to content

Commit 89648da

Browse files
committed
fixes
1 parent a41ea42 commit 89648da

File tree

12 files changed

+223
-90
lines changed

12 files changed

+223
-90
lines changed
Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
# syntax=docker/dockerfile:1
2-
FROM cr.yandex/mirror/ubuntu:focal AS breakpad-base
1+
# syntax=docker/dockerfile:1.4
2+
ARG BASE_IMAGE="cr.yandex/mirror/ubuntu"
3+
ARG BASE_IMAGE_TAG="focal"
4+
ARG BREAKPAD_GIT_TAG="v2022.07.12"
5+
FROM ${BASE_IMAGE}:${BASE_IMAGE_TAG} AS breakpad-base
36
RUN \
47
apt-get -yqq update && \
5-
apt-get -yqq install git build-essential libz-dev python3 curl && \
6-
apt-get -yqq clean all && \
7-
rm -rf /var/lib/apt/lists/*
8+
apt-get -yqq install --no-install-recommends git build-essential libz-dev python3 curl && \
9+
apt-get clean all && rm -rf /var/lib/apt/lists/*
810
RUN git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
911
ENV PATH="/depot_tools:${PATH}"
1012

11-
ARG BREAKPAD_GIT_TAG="v2022.07.12"
1213
FROM breakpad-base AS breakpad-build
13-
COPY --link breakpad_init.cc /breakpad/breakpad_init.cc
14+
COPY /breakpad_init.cc /breakpad/breakpad_init.cc
1415
RUN \
1516
cd breakpad && \
1617
fetch breakpad && \
@@ -20,6 +21,6 @@ RUN \
2021
g++ -std=c++11 -shared -Wall -o ../libbreakpad_init.so -fPIC ../breakpad_init.cc -Isrc/ -Lsrc/client/linux/ -lbreakpad_client -lpthread
2122

2223
FROM scratch AS breakpad-release
23-
2424
COPY --link --from=breakpad-build /breakpad/libbreakpad_init.so /usr/lib/libbreakpad_init.so
25-
COPY --link --from=breakpad-build /breakpad/src/src/tools/linux/md2core/minidump-2-core /usr/bin/minidump-2-core
25+
COPY --link --from=breakpad-build /breakpad/src/src/tools/linux/md2core/minidump-2-core /usr/bin/minidump-2-core
26+
COPY --link --from=breakpad-build /breakpad/src/src/processor/minidump_stackwalk /usr/bin/minidump_stackwalk
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// breakpad_init.cc: A shared library to initialize breakpad signal handler via LD_PRELOAD.
2+
3+
#include <stdlib.h>
4+
#include <unistd.h>
5+
#include <sys/wait.h>
6+
#include "client/linux/handler/exception_handler.h"
7+
8+
using google_breakpad::MinidumpDescriptor;
9+
using google_breakpad::ExceptionHandler;
10+
11+
// callback function, called after minidump was created
12+
static bool dumpCallback(const MinidumpDescriptor& descriptor, void* context, bool succeeded) {
13+
char *script = getenv("BREAKPAD_MINIDUMPS_SCRIPT");
14+
if (script != NULL) {
15+
pid_t pid=fork();
16+
if (pid == 0) {
17+
char* dumpSucceded = succeeded ? (char *)"true" : (char *)"false";
18+
char* descriptorPath = succeeded ? (char *)descriptor.path() : (char *)"\0";
19+
char* cmd[] = {script, dumpSucceded, descriptorPath, NULL};
20+
execve(cmd[0], &cmd[0], NULL);
21+
} else {
22+
waitpid(pid, 0, 0);
23+
}
24+
}
25+
return succeeded;
26+
}
27+
28+
// create signal handlers on shared library init
29+
__attribute__((constructor))
30+
static void breakpad_init() {
31+
32+
const char * path = ::getenv("BREAKPAD_MINIDUMPS_PATH");
33+
34+
static MinidumpDescriptor descriptor((path) ? path : "/tmp");
35+
static ExceptionHandler handler(
36+
descriptor, // minidump descriptor
37+
NULL, // callback filter
38+
dumpCallback, // callback function
39+
NULL, // callback context
40+
true, // do install handler
41+
-1 // server descriptor
42+
);
43+
}

ydb/deploy/docker/breakpad_init/pkg.json renamed to ydb/deploy/breakpad_init/pkg.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
"meta": {
33
"name": "breakpad_init",
44
"maintainer": "ydb <info@ydb.tech>",
5-
"description": "Package with breakpad init",
5+
"description": "Package with breakpad_init",
66
"version": "v2022.07.12.{revision}"
77
},
88
"build": {},
99
"params": {
1010
"docker_build_network": "host",
1111
"docker_registry": "cr.yandex",
1212
"docker_repository": "crp2lrlsrs36odlvd8dv",
13+
"docker_target": "breakpad-release",
1314
"docker_build_arg": {
1415
"BREAKPAD_GIT_TAG": "v2022.07.12"
1516
}

ydb/deploy/docker/Dockerfile

Lines changed: 70 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,65 @@
11
# syntax=docker/dockerfile:1.4
2-
ARG BREAKPAD_IMAGE_TAG=v2022.07.12
2+
ARG BASE_IMAGE="cr.yandex/mirror/ubuntu"
3+
ARG BASE_IMAGE_TAG="focal"
4+
ARG BREAKPAD_IMAGE="cr.yandex/crp2lrlsrs36odlvd8dv/breakpad_init"
5+
ARG BREAKPAD_IMAGE_TAG="v2022.07.12"
6+
37
###
48
# Base image with required deb packages
59
###
6-
FROM cr.yandex/mirror/ubuntu:focal AS base
10+
FROM ${BASE_IMAGE}:${BASE_IMAGE_TAG} AS base
11+
RUN groupadd -r ydb && useradd --no-log-init -r -m -g ydb -G disk ydb && \
12+
apt-get -yqq update && \
13+
apt-get -yqq install --no-install-recommends libcap2-bin ca-certificates && \
14+
apt-get clean && rm -rf /var/lib/apt/lists/*
15+
16+
###
17+
# Base image with google brekpad assets
18+
###
19+
FROM ${BREAKPAD_IMAGE}:${BREAKPAD_IMAGE_TAG} AS breakpad_init
20+
FROM base AS base-breakpad
721
RUN \
822
apt-get -yqq update && \
9-
apt-get -yqq install libcap2-bin ca-certificates && \
10-
apt-get -yqq clean all && \
11-
rm -rf /var/lib/apt/lists/* && \
12-
groupadd -r ydb && \
13-
useradd --no-log-init -r -m -g ydb -G disk ydb
23+
apt-get -yqq install --no-install-recommends binutils gdb strace linux-tools-generic \
24+
apt-get clean && rm -rf /var/lib/apt/lists/*
25+
ENV LD_PRELOAD=libbreakpad_init.so
26+
ENV BREAKPAD_MINIDUMPS_PATH=/opt/ydb/volumes/coredumps
27+
ENV BREAKPAD_MINIDUMPS_SCRIPT=/opt/ydb/bin/minidump_script.py
28+
# breakpad binaries
29+
COPY --chmod=4644 --from=breakpad_init /usr/lib/libbreakpad_init.so /usr/lib/libbreakpad_init.so
30+
COPY --chmod=0755 --from=breakpad_init /usr/bin/minidump_stackwalk /usr/bin/minidump_stackwalk
31+
COPY --chmod=0755 --from=breakpad_init /usr/bin/minidump-2-core /usr/bin/minidump-2-core
32+
# minidump callback script
33+
COPY --chmod=0755 --chown=ydb /minidump_script.py /opt/ydb/bin/minidump_script.py
1434

15-
FROM base AS base-debug
35+
###
36+
# Base image with debug packages
37+
###
38+
FROM base-breakpad AS base-debug
1639
RUN \
1740
apt-get -yqq update && \
18-
apt-get -yqq install dnsutils telnet netcat-openbsd iputils-ping gdb atop strace curl linux-tools-generic && \
19-
apt-get -yqq clean all && \
20-
rm -rf /var/lib/apt/lists/*
41+
apt-get -yqq --no-install-recommends dnsutils telnet netcat-openbsd iputils-ping curl && \
42+
apt-get clean all && rm -rf /var/lib/apt/lists/*
2143

2244
FROM scratch AS license
2345
# release information
2446
COPY --chmod=0644 /AUTHORS /AUTHORS
2547
COPY --chmod=0644 /LICENSE /LICENSE
2648
COPY --chmod=0644 /README.md /README.md
2749

28-
FROM scratch AS libs
50+
FROM scratch AS dynamic-libs
2951
# dynamic libraries
3052
COPY --chmod=0644 /libiconv.so /lib/libiconv.so
3153
COPY --chmod=0644 /liblibidn-dynamic.so /lib/liblibidn-dynamic.so
3254
COPY --chmod=0644 /liblibaio-dynamic.so /lib/liblibaio-dynamic.so
3355

34-
###
35-
# Image with setcap'ed ydb binary
36-
###
56+
FROM base AS ydb-binary
57+
COPY --chmod=0755 --chown=ydb /ydb /opt/ydb/bin/ydb
58+
3759
FROM base AS ydbd-setcap
38-
COPY --chmod=0755 --chown=ydb /ydbd /ydbd
60+
COPY --chmod=0755 --chown=ydb /ydbd /opt/ydb/bin/ydbd
3961
# workaround for decrease image size
40-
RUN /sbin/setcap CAP_SYS_RAWIO=ep /ydbd
62+
RUN /sbin/setcap CAP_SYS_RAWIO=ep /opt/ydb/bin/ydbd
4163

4264
###
4365
# Release image
@@ -48,41 +70,52 @@ COPY --link --from=license /AUTHORS /AUTHORS
4870
COPY --link --from=license /LICENSE /LICENSE
4971
COPY --link --from=license /README.md /README.md
5072
# dynamic libraries
51-
COPY --link --from=libs /lib/libiconv.so /lib/libiconv.so
52-
COPY --link --from=libs /lib/liblibidn-dynamic.so /lib/liblibidn-dynamic.so
53-
COPY --link --from=libs /lib/liblibaio-dynamic.so /lib/liblibaio-dynamic.so
73+
COPY --link --from=dynamic-libs /lib/libiconv.so /lib/libiconv.so
74+
COPY --link --from=dynamic-libs /lib/liblibidn-dynamic.so /lib/liblibidn-dynamic.so
75+
COPY --link --from=dynamic-libs /lib/liblibaio-dynamic.so /lib/liblibaio-dynamic.so
5476
# ydb binaries
55-
COPY --chmod=0755 --chown=ydb /ydb /opt/ydb/bin/ydb
56-
COPY --link --from=ydbd-setcap /ydbd /opt/ydb/bin/ydbd
77+
COPY --link --from=ydb-binary /opt/ydb/bin/ydb /opt/ydb/bin/ydb
78+
COPY --link --from=ydbd-setcap /opt/ydb/bin/ydbd /opt/ydb/bin/ydbd
5779

5880
WORKDIR /opt/ydb/bin
5981
USER ydb
6082

6183
###
62-
# Breakpad image
84+
# Breakpad Image
6385
###
64-
FROM cr.yandex/crp2lrlsrs36odlvd8dv/breakpad_init:$BREAKPAD_IMAGE_TAG AS breakpad
86+
FROM base-breakpad AS breakpad
87+
# release information
88+
COPY --link --from=license /AUTHORS /AUTHORS
89+
COPY --link --from=license /LICENSE /LICENSE
90+
COPY --link --from=license /README.md /README.md
91+
# dynamic libraries
92+
COPY --link --from=dynamic-libs /lib/libiconv.so /lib/libiconv.so
93+
COPY --link --from=dynamic-libs /lib/liblibidn-dynamic.so /lib/liblibidn-dynamic.so
94+
COPY --link --from=dynamic-libs /lib/liblibaio-dynamic.so /lib/liblibaio-dynamic.so
95+
# ydb binaries
96+
COPY --link --from=ydb-binary /opt/ydb/bin/ydb /opt/ydb/bin/ydb
97+
COPY --link --from=ydbd-setcap /opt/ydb/bin/ydbd /opt/ydb/bin/ydbd
98+
99+
WORKDIR /opt/ydb/bin
100+
USER ydb
65101

66102
###
67-
# Debug image with additional packages
103+
# Debug Image
68104
###
69105
FROM base-debug AS debug
70106
# release information
71107
COPY --link --from=license /AUTHORS /AUTHORS
72108
COPY --link --from=license /LICENSE /LICENSE
73109
COPY --link --from=license /README.md /README.md
74110
# dynamic libraries
75-
COPY --link --from=libs /lib/libiconv.so /lib/libiconv.so
76-
COPY --link --from=libs /lib/liblibidn-dynamic.so /lib/liblibidn-dynamic.so
77-
COPY --link --from=libs /lib/liblibaio-dynamic.so /lib/liblibaio-dynamic.so
111+
COPY --link --from=dynamic-libs /lib/libiconv.so /lib/libiconv.so
112+
COPY --link --from=dynamic-libs /lib/liblibidn-dynamic.so /lib/liblibidn-dynamic.so
113+
COPY --link --from=dynamic-libs /lib/liblibaio-dynamic.so /lib/liblibaio-dynamic.so
78114
# ydb binaries
79-
COPY --chmod=0755 --chown=ydb /ydb /opt/ydb/bin/ydb
80-
COPY --link --from=ydbd-setcap /ydbd /opt/ydb/bin/ydbd
81-
82-
ENV BREAKPAD_MINIDUMPS_PATH=/opt/ydb/volumes/coredumps/
83-
ENV BREAKPAD_MINIDUMPS_SCRIPT=/opt/ydb/bin/minidump_script.py
84-
ENV LD_PRELOAD=libbreakpad_init.so
85-
COPY --chmod=4644 --link --from=breakpad /usr/lib/libbreakpad_init.so /usr/lib/libbreakpad_init.so
86-
COPY --chmod=0755 --link --from=breakpad /usr/bin/minidump-2-core /usr/bin/minidump-2-core
87-
COPY --chmod=0755 --chown=ydb /minidump_script.py /opt/ydb/bin/minidump_script.py
115+
COPY --link --from=ydb-binary /opt/ydb/bin/ydb /opt/ydb/bin/ydb
116+
COPY --link --from=ydbd-setcap /opt/ydb/bin/ydbd /opt/ydb/bin/ydbd
117+
# debug symbols
88118
COPY --chmod=0644 --chown=ydb /ydbd.debug /opt/ydb/bin/ydbd.debug
119+
120+
WORKDIR /opt/ydb/bin
121+
USER ydb

ydb/deploy/docker/README.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# Docker image
2+
3+
## Base image
4+
5+
Base layer is official `ubuntu:20.04` docker image with packages:
6+
- libcap2-bin (for setcap to binaries)
7+
- ca-certificates (for working with CA bundle)
8+
9+
## Image Types
10+
11+
### Release
12+
13+
```bash
14+
ya package --docker ydb/deploy/docker/pkg.json
15+
```
16+
17+
Image with minimal requirements to launch ydbd in container.
18+
19+
The image includes:
20+
- dynamic cpp libraries (libiconv, libidn, libaio)
21+
- ydb cli binary
22+
- ydbd server strip'ed binary
23+
24+
25+
### Breakpad
26+
27+
```bash
28+
ya package --docker ydb/deploy/docker/breakpad/pkg.json
29+
```
30+
31+
Image with google breakpad assets to collect minidump instead of coredump.
32+
33+
Extend release image with:
34+
- additional packages to collect and manage minidump format
35+
- dynamic library `libbreakpad_init.so` from breakpad_init image (ydb/deploy/breakpad_init)
36+
- environment variable `LD_PRELOAD` to load library on process start
37+
- binaries `minidump_stackwalk` and `minidump-2-core` to collect stacktrace and convert to coredump format
38+
- python script `minidump_script.py` as dumpCallback handler for google breakpad
39+
- environment variables `BREAKPAD_MINIDUMPS_PATH` and `BREAKPAD_MINIDUMPS_SCRIPT` to setup breakpad
40+
41+
### Debug
42+
43+
```bash
44+
ya package --docker ydb/deploy/docker/debug/pkg.json
45+
```
46+
47+
Image with google breakpad assets to collect minidump instead of coredump.
48+
49+
Extend breakpad image with:
50+
- additional packages with debug utils (dnsutils, telnet, netcat-openbsd, iputils-ping, curl)
51+
- debug symbols for ydbd binary
52+
53+
## Additional Info
54+
55+
All types of images also included LICENSE and AUTHORS files from root of repository
56+

ydb/deploy/docker/debug/minidump_script.py renamed to ydb/deploy/docker/breakpad/minidump_script.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
"/usr/bin/gdb",
2626
"/opt/ydb/bin/ydbd",
2727
core_file,
28-
"-symbols=/opt/ydb/bin/ydbd.debug",
2928
"-iex=set auto-load safe-path /",
3029
"-ex=thread apply all bt",
3130
"--batch",
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"meta": {
3+
"name": "ydb",
4+
"maintainer": "ydb <ydb@yandex-team.ru>",
5+
"description": "Package with opensource YDB for Kubernetes with google breakpad support",
6+
"version": "breakpad-{branch}.{revision}"
7+
},
8+
"params": {
9+
"docker_build_network": "host",
10+
"docker_registry": "cr.yandex",
11+
"docker_repository": "crp2lrlsrs36odlvd8dv",
12+
"docker_target": "breakpad"
13+
},
14+
"include": [
15+
"ydb/deploy/docker/pkg.json"
16+
],
17+
"data": [
18+
{
19+
"source": {
20+
"type": "ARCADIA",
21+
"path": "ydb/deploy/docker/breakpad/minidump_script.py"
22+
},
23+
"destination": {
24+
"path": "/minidump_script.py"
25+
}
26+
}
27+
]
28+
}

ydb/deploy/docker/breakpad_init/breakpad_init.cc

Lines changed: 0 additions & 23 deletions
This file was deleted.

ydb/deploy/docker/debug/pkg.json

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"meta": {
33
"name": "ydb",
44
"maintainer": "ydb <ydb@yandex-team.ru>",
5-
"description": "Package with opensource YDB for Kubernetes with debug",
5+
"description": "Package with opensource YDB for Kubernetes with debug symbols",
66
"version": "dbg-{branch}.{revision}"
77
},
88
"params": {
@@ -12,17 +12,7 @@
1212
"docker_target": "debug"
1313
},
1414
"include": [
15-
"ydb/deploy/docker/pkg.json"
15+
"ydb/deploy/docker/minidump/pkg.json"
1616
],
17-
"data": [
18-
{
19-
"source": {
20-
"type": "RELATIVE",
21-
"path": "minidump_script.py"
22-
},
23-
"destination": {
24-
"path": "/minidump_script.py"
25-
}
26-
}
27-
]
17+
"data": []
2818
}

0 commit comments

Comments
 (0)