-
Notifications
You must be signed in to change notification settings - Fork 35
Expand file tree
/
Copy pathDockerfile
More file actions
183 lines (148 loc) · 5.38 KB
/
Dockerfile
File metadata and controls
183 lines (148 loc) · 5.38 KB
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
#
# Copyright (C) 2019-2026 KFERMercer <https://github.com/KFERMercer>
#
# By default, this Dockerfile will build a minimal FFmpeg tailored for ctbcap,
# it will significantly reduce the size of final image. ( 140MB -> ~18MB )
#
# Make default build (Minimal FFmpeg):
# `docker build --tag ctbcap .`
#
# Or, use fat FFmpeg from Alpine repo:
# `docker build --build-arg BUILD_TARGET=fat --target fat --tag ctbcap .`
#
# Universal base for FFmpeg builder & final product.
FROM alpine:latest AS mother
RUN apk add --no-cache curl
# Big brother of the final product.
FROM mother AS heir
LABEL org.opencontainers.image.title="CtbCap"
LABEL org.opencontainers.image.description="A simple webcam capturer for CB & SC."
LABEL org.opencontainers.image.authors="KFERMercer <https://github.com/KFERMercer>"
LABEL org.opencontainers.image.licenses="GPL-3.0-or-later"
LABEL org.opencontainers.image.url="https://github.com/KFERMercer/ctbcap?tab=readme-ov-file"
LABEL org.opencontainers.image.source="https://github.com/KFERMercer/ctbcap"
RUN <<EOT
apk add --no-cache tini tzdata
mkdir -p -m 777 /save /log
EOT
ARG CUID=1000
ARG CGID=1000
ENV TZ="UTC"
ENV LOG_PATH="/log"
ENV SAVE_PATH="/save"
ENV MODEL=""
ENV PLATFORM="chaturbate"
ENV CUT_TIME=3600
ENV EDGING_MODE="uncle makes me pee white"
ENV DEBUG_MODE="your mom is so hot"
ENV RECORDING_IGNORE_PROXY="charlie_kirk rule34"
ENV NOBANNER="^>vvv"
ENTRYPOINT ["tini", "-g", "--", "ctbcap"]
ARG BUILD_TARGET
# Product using FFmpeg from Alpine repo.
FROM heir AS fat
RUN <<EOT
[ ${BUILD_TARGET} = "fat" ] || {
echo "Skipping fat build"
exit 0
}
apk add --no-cache ffmpeg
EOT
COPY ./ctbcap /usr/bin/
USER ${CUID}:${CGID}
# FFmpeg builder.
FROM mother AS builder
RUN apk add --no-cache build-base gnupg openssl-dev nasm zlib-dev
RUN <<EOT
cat <<-EOK | gpg --import # FFmpeg public PGP key
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBE22rV0BCAC3DzRmA2XlhrqYv9HKoEvNHHf+PzosmCTHmYhWHDqvBxPkSvCl
ipkbvJ4pBnVvcX6mW5QyKhspHm5j1X5ibe9Bt9/chS/obnIobmvF8shSUgjQ0qRW
9c1aWOjvT26SxYQ1y9TmYCFwixeydGFHYKjAim+evGUccni5KMlfPoT3VTPtim78
ufkr3E9Nco/Mobn/8APO0NmLEGWAM6ln/8J/c9h6a1QKnQyBqWfT0YnAaebafFaZ
YwOtRdDG54VbJ4xwcHbCj5cKhTABk/QtBzDvnW4bG+uSpqdHbFZEY2JpURDuj/T3
NudKQGzn0bYNpY1XY2l0pqs/btKHnBW0fVMjABEBAAG0NEZGbXBlZyByZWxlYXNl
IHNpZ25pbmcga2V5IDxmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZz6JATgEEwECACIF
Ak22rV0CGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJELQyLwTWdljYKxUH
/1fqzl7SKie2g4t4PJbqUbkLuMsC+CP6gp0dcVZOHkuUYAoD3PM3iVxpLBVyKIXI
g7wMSTAtlIcYnzhWIpnoCBes6/O2Mrq6xHgGeTp6CDcm3LmmSYR1f5KdD8KUaA+l
c/M/1fEnwrSs/UGDk6R6iUmbqwxPsbozlOvmUHOLbDZBnKrk9XfAJdUhAuFACrSA
T+KF1jniz0OfNGd23SaHWRCphoRW9pXDc5FfkdaueBUvBvGv19ZNcDhcxT3/u6z2
DaUFC0rLWqk8obo951jVvi/zOhB94Pw6u1SLvcTq3V1q5URWJtgSbpih9VRqxUbQ
NbXduKGzbHz6Vwpkupz4JRe5AQ0ETbatXQEIANjYrygJi/fn1nlSg5Mz0l9KHDm4
yfWtaOrXUjJcyiGe4G0XXJLGh45qxJ0DOKzi9id+9W4jby+kKuzG9O6Vn0iDeODO
aOGnz4ua7Vu6d0AbYfNXZPWge/GCodo/ZD/qri1tPkLmRtT/sniahwy6LruPNHfF
SRoNIjwbcD/IL+EbY1pL1/IFSzEAA1ZZamgmHgB7o9pwDIkK6HuvHMR/Y5MsoMfV
fWV3ZGtA6v9z51CvnHsHPsADRSnUp7aYtR412SiAO4XodMLTA92L3LxgYhI4ma7D
XZ8jgKg4JkKO+DXmoU63HtRdq/HZjeXJKk1JGJF3zCvP3DyIzZ8LWIjN8t0AEQEA
AYkBHwQYAQIACQUCTbatXQIbDAAKCRC0Mi8E1nZY2LS8B/0bMoUAl4X9D0WQbL4l
U0czCIOKOsvbHpIxivjCnOQxU23+PV5WZdoCCpSuAHGv+2OHzhNrij++P9BNTJeQ
skxdS9FH4MZwy1IRSPrxegSxbCUpBI1rd0Zf7qb9BNPrHPTueWFV1uExOSB2Apsv
WrKo2D8mR0uZAPYfYl2ToFVoa5PR7/+ii9WiJr/flF6qm7hoLpI5Bm4VcZh2GPsJ
9Vo/8x/qOGwtdWHqBykYloKsrwD4U69rjn+d9feLoPBRgoVroXWQttt0sUnyoudz
+x8ETJgPoNK3kQoDagApj4qAt83Ayac3HzNIuEJ7LdvfINIOprujnJ9vH4n04XLg
I4EZ
=Rjbw
-----END PGP PUBLIC KEY BLOCK-----
EOK
echo "FCF986EA15E6E293A5644F10B4322F04D67658D8:6:" | gpg --import-ownertrust
rm -rf ~/.gnupg/public-keys.d/pubring.db.lock
EOT
WORKDIR /ffmpeg_source
RUN <<EOT
# Get newest version tarball of FFmpeg.
FFMPEG_TARBALL="$( \
curl -s -L -k --connect-timeout 5 --retry 3 \
"https://ffmpeg.org/releases/" \
| grep -oE 'ffmpeg-[0-9]+.*.tar.xz' \
| sed 's|\.tar.xz.*||' \
| sort -V \
| tail -n 1 \
).tar.xz"
curl -L -k --connect-timeout 5 --retry 3 \
"https://ffmpeg.org/releases/${FFMPEG_TARBALL}" \
-o "${FFMPEG_TARBALL}"
curl -L -k --connect-timeout 5 --retry 3 \
"https://ffmpeg.org/releases/${FFMPEG_TARBALL}.asc" \
-o "${FFMPEG_TARBALL}.asc"
gpg --verify "${FFMPEG_TARBALL}.asc" "${FFMPEG_TARBALL}" || {
echo >&2 "(ERROR) Failed to verify FFmpeg signature for ${FFMPEG_TARBALL} !"
exit 1
}
echo "(INFO) Will build using ${FFMPEG_TARBALL} ..."
tar -xf "${FFMPEG_TARBALL}" --strip-components 1
EOT
WORKDIR /ffmpeg_bin
RUN <<EOT
# `--enable-openssl`: will use existing openssl library brought by curl.
/ffmpeg_source/configure \
--disable-everything \
--disable-debug \
--disable-autodetect \
--disable-avdevice \
--disable-swscale \
--disable-doc \
--disable-programs --enable-ffmpeg \
--disable-shared --enable-static \
--enable-zlib --enable-openssl \
--enable-decoder=h264,hevc,av1,aac \
--enable-parser=h264,hevc,av1,aac \
--enable-demuxer=hls,mp4,m4v,mpegts \
--enable-muxer=segment,matroska \
--enable-protocol=hls,http,https,file,udp \
--enable-bsf=extract_extradata \
--enable-small \
--optflags=-O3 --extra-ldflags="-s"
EOT
RUN <<EOT
make -j$(nproc)
[ -e ./ffmpeg ] || {
echo >&2 "(ERROR) Failed to build FFmpeg bin!"
exit 1
}
EOT
# Product using minimal FFmpeg.
FROM heir AS minimal
COPY --from=builder /ffmpeg_bin/ffmpeg /usr/bin/
COPY ./ctbcap /usr/bin/
USER ${CUID}:${CGID}