Skip to content

Commit d66ac52

Browse files
authored
Build static FFmpeg and copy binary to Node base (#2468)
Docker: build minimal FFmpeg binary and optimize recorder Signed-off-by: Viet Nguyen Duc <[email protected]>
1 parent 36d98e9 commit d66ac52

File tree

19 files changed

+284
-243
lines changed

19 files changed

+284
-243
lines changed

Diff for: .ffmpeg/Dockerfile

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
FROM ubuntu:noble AS builder
2+
ARG VERSION_FFMPEG="7.1"
3+
ARG VERSION_RCLONE="v1.68.2"
4+
ARG VERSION_GO="latest"
5+
6+
USER root
7+
8+
#======================================
9+
# Install build tools
10+
#======================================
11+
ARG TOOLS_DEPS="autoconf automake cmake libfreetype6 gcc build-essential libtool make nasm pkg-config zlib1g-dev numactl \
12+
libnuma-dev libx11-6 libxcb1 libxcb1-dev yasm git curl jq wget ca-certificates"
13+
14+
RUN apt-get update -qqy \
15+
&& apt-get upgrade -yq \
16+
&& apt-get -qqy --no-install-recommends install ${TOOLS_DEPS} \
17+
&& apt-get -qyy clean \
18+
&& mkdir -p /usr/local/src
19+
20+
RUN if [ "${VERSION_GO}" = "latest" ]; then \
21+
VERSION_GO=$(curl -sk https://go.dev/dl/?mode=json | jq -r '.[0].version'); \
22+
fi \
23+
&& curl -skLO https://go.dev/dl/$VERSION_GO.linux-$(dpkg --print-architecture).tar.gz \
24+
&& tar -xf $VERSION_GO.linux-$(dpkg --print-architecture).tar.gz -C /usr/local \
25+
&& rm -rf $VERSION_GO.linux-$(dpkg --print-architecture).tar.gz* \
26+
&& ln -sf /usr/local/go/bin/go /usr/bin/go \
27+
&& go version
28+
29+
RUN cd /usr/local/src \
30+
&& git clone https://github.com/rclone/rclone.git \
31+
&& cd rclone \
32+
&& git checkout $VERSION_RCLONE \
33+
&& make \
34+
&& mv ~/go/bin/rclone /usr/local/bin/ \
35+
&& rclone version
36+
37+
#======================================
38+
# Install x264 from source
39+
#======================================
40+
RUN cd /usr/local/src \
41+
&& git clone https://code.videolan.org/videolan/x264.git \
42+
&& cd x264 \
43+
&& ./configure --prefix="/usr/local" --enable-static \
44+
&& make \
45+
&& make install
46+
47+
#======================================
48+
# Install FFmpeg from source
49+
#======================================
50+
RUN cd /usr/local/src \
51+
&& git clone https://github.com/FFmpeg/FFmpeg.git \
52+
&& cd FFmpeg \
53+
&& git checkout release/$VERSION_FFMPEG \
54+
&& PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" ./configure \
55+
--prefix="/usr/local" \
56+
--extra-cflags="-I/usr/local/include" \
57+
--extra-ldflags="-L/usr/local/lib" \
58+
--pkg-config-flags="--static" \
59+
--enable-gpl \
60+
--enable-nonfree \
61+
--enable-libx264 \
62+
--enable-libxcb \
63+
--enable-static \
64+
&& make \
65+
&& make install
66+
67+
# Final stage
68+
FROM ubuntu:noble
69+
70+
USER root
71+
72+
COPY --from=builder /usr/local/bin/ffmpeg /usr/local/bin/ffmpeg
73+
COPY --from=builder /usr/local/bin/rclone /usr/local/bin/rclone
74+
75+
RUN apt-get -qqy update \
76+
&& apt-get -qqy --no-install-recommends install \
77+
libx11-dev libxcb1 libxcb-shm0 \
78+
&& rm -rf /var/lib/apt/lists/* /var/cache/apt/*
79+
80+
RUN ffmpeg -version \
81+
&& rclone --version

Diff for: Base/Dockerfile

+15-13
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ ENV DEBIAN_FRONTEND=noninteractive \
3535
SEL_GID=${GID} \
3636
HOME=${HOME} \
3737
TZ=${TZ} \
38-
SEL_DOWNLOAD_DIR=${HOME}/Downloads
38+
SEL_DOWNLOAD_DIR=${HOME}/Downloads \
39+
VIDEO_FOLDER="/videos"
3940

4041
#========================
4142
# Miscellaneous packages
4243
# Includes minimal runtime used for executing non GUI Java programs
4344
#========================
44-
RUN --mount=type=secret,id=SEL_PASSWD \
45-
if [ "$(dpkg --print-architecture)" = "amd64" ]; then \
45+
RUN if [ "$(dpkg --print-architecture)" = "amd64" ]; then \
4646
echo "deb http://archive.ubuntu.com/ubuntu noble main universe\n" > /etc/apt/sources.list \
4747
&& echo "deb http://archive.ubuntu.com/ubuntu noble-updates main universe\n" >> /etc/apt/sources.list \
4848
&& echo "deb http://security.ubuntu.com/ubuntu noble-security main universe\n" >> /etc/apt/sources.list ; \
@@ -52,6 +52,7 @@ RUN --mount=type=secret,id=SEL_PASSWD \
5252
&& apt-get -qqy --no-install-recommends install \
5353
acl \
5454
bzip2 \
55+
xz-utils \
5556
ca-certificates \
5657
tzdata \
5758
sudo \
@@ -62,15 +63,16 @@ RUN --mount=type=secret,id=SEL_PASSWD \
6263
supervisor \
6364
gnupg2 \
6465
libnss3-tools \
65-
python3-pip \
6666
openjdk-${JRE_VERSION}-jre-headless \
67-
&& if [ "${TARGETARCH}" = "arm" ] && [ "${TARGETVARIANT}" = "v7" ]; then \
67+
&& rm -rf /var/lib/apt/lists/* /var/cache/apt/*
68+
69+
RUN --mount=type=secret,id=SEL_PASSWD \
70+
if [ "${TARGETARCH}" = "arm" ] && [ "${TARGETVARIANT}" = "v7" ]; then \
6871
export ARCH=armhf ; \
6972
else \
7073
export ARCH=$(dpkg --print-architecture) ; \
7174
fi \
7275
&& sed -i 's/securerandom\.source=file:\/dev\/random/securerandom\.source=file:\/dev\/urandom/' /usr/lib/jvm/java-${JRE_VERSION}-openjdk-${ARCH}/conf/security/java.security \
73-
&& rm -rf /var/lib/apt/lists/* /var/cache/apt/* \
7476
#===================
7577
# Timezone settings
7678
# Possible alternative: https://github.com/docker/docker/issues/3359#issuecomment-32150214
@@ -95,18 +97,18 @@ RUN --mount=type=secret,id=SEL_PASSWD \
9597
# Selenium & relaxing permissions for OpenShift and other non-sudo environments
9698
#==========
9799
&& mkdir -p /opt/selenium /opt/selenium/assets /opt/selenium/secrets /var/run/supervisor /var/log/supervisor ${SEL_DOWNLOAD_DIR} \
98-
${HOME}/.mozilla ${HOME}/.vnc ${HOME}/.pki/nssdb \
100+
${HOME}/.mozilla ${HOME}/.vnc ${HOME}/.pki/nssdb ${VIDEO_FOLDER} \
99101
# NSSDB initialization with an empty password
100102
&& certutil -d sql:${HOME}/.pki/nssdb -N --empty-password \
101103
&& touch /opt/selenium/config.toml \
102-
&& chown -R ${SEL_USER}:${SEL_GROUP} /opt/selenium /var/run/supervisor /var/log/supervisor /etc/passwd ${HOME} \
103-
&& chmod -R 775 /opt/selenium /var/run/supervisor /var/log/supervisor /etc/passwd ${HOME} \
104+
&& chown -R ${SEL_USER}:${SEL_GROUP} /opt/selenium /var/run/supervisor /var/log/supervisor /etc/passwd ${HOME} ${VIDEO_FOLDER} \
105+
&& chmod -R 775 /opt/selenium /var/run/supervisor /var/log/supervisor /etc/passwd ${HOME} ${VIDEO_FOLDER} \
104106
&& wget --no-verbose https://github.com/${AUTHORS}/selenium/releases/download/${RELEASE}/selenium-server-${VERSION}.jar \
105107
-O /opt/selenium/selenium-server.jar \
106-
&& chgrp -R 0 /opt/selenium ${HOME} /opt/selenium/assets /var/run/supervisor /var/log/supervisor \
107-
&& chmod -R g=u /opt/selenium ${HOME} /opt/selenium/assets /var/run/supervisor /var/log/supervisor \
108-
&& setfacl -Rm u:${SEL_USER}:rwx /opt /opt/selenium ${HOME} /opt/selenium/assets /var/run/supervisor /var/log/supervisor \
109-
&& setfacl -Rm g:${SEL_GROUP}:rwx /opt /opt/selenium ${HOME} /opt/selenium/assets /var/run/supervisor /var/log/supervisor \
108+
&& chgrp -R 0 /opt/selenium ${HOME} ${VIDEO_FOLDER} /opt/selenium/assets /var/run/supervisor /var/log/supervisor \
109+
&& chmod -R g=u /opt/selenium ${HOME} ${VIDEO_FOLDER} /opt/selenium/assets /var/run/supervisor /var/log/supervisor \
110+
&& setfacl -Rm u:${SEL_USER}:rwx /opt /opt/selenium ${HOME} ${VIDEO_FOLDER} /opt/selenium/assets /var/run/supervisor /var/log/supervisor \
111+
&& setfacl -Rm g:${SEL_GROUP}:rwx /opt /opt/selenium ${HOME} ${VIDEO_FOLDER} /opt/selenium/assets /var/run/supervisor /var/log/supervisor \
110112
#=====
111113
# Download observability related OpenTelemetry jars and make them available in a separate directory
112114
# so that the container can skip downloading them everytime it comes up

Diff for: Makefile

+20-7
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@ BUILD_ARGS := $(BUILD_ARGS) --progress plain
1717
MAJOR := $(word 1,$(subst ., ,$(TAG_VERSION)))
1818
MINOR := $(word 2,$(subst ., ,$(TAG_VERSION)))
1919
MAJOR_MINOR_PATCH := $(word 1,$(subst -, ,$(TAG_VERSION)))
20+
FFMPEG_VERSION := $(or $(FFMPEG_VERSION),$(FFMPEG_VERSION),7.1)
2021
FFMPEG_TAG_PREV_VERSION := $(or $(FFMPEG_TAG_PREV_VERSION),$(FFMPEG_TAG_PREV_VERSION),ffmpeg-7.1)
2122
FFMPEG_TAG_VERSION := $(or $(FFMPEG_TAG_VERSION),$(FFMPEG_TAG_VERSION),ffmpeg-7.1)
22-
FFMPEG_BASED_NAME := $(or $(FFMPEG_BASED_NAME),$(FFMPEG_BASED_NAME),linuxserver)
23-
FFMPEG_BASED_TAG := $(or $(FFMPEG_BASED_TAG),$(FFMPEG_BASED_TAG),version-7.1-cli)
23+
FFMPEG_BASED_NAME := $(or $(FFMPEG_BASED_NAME),$(FFMPEG_BASED_NAME),selenium)
24+
FFMPEG_BASED_TAG := $(or $(FFMPEG_BASED_TAG),$(FFMPEG_BASED_TAG),latest)
2425
CURRENT_PLATFORM := $(shell if [ `arch` = "aarch64" ] || [ `arch` = "arm64" ]; then echo "linux/arm64"; else echo "linux/amd64"; fi)
2526
PLATFORMS := $(or $(PLATFORMS),$(shell echo $$PLATFORMS),$(CURRENT_PLATFORM))
2627
SEL_PASSWD := $(or $(SEL_PASSWD),$(SEL_PASSWD),secret)
@@ -143,8 +144,8 @@ sessionqueue: base
143144
event_bus: base
144145
cd ./EventBus && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) -t $(NAME)/event-bus:$(TAG_VERSION) .
145146

146-
node_base: base
147-
cd ./NodeBase && SEL_PASSWD=$(SEL_PASSWD) docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) --secret id=SEL_PASSWD -t $(NAME)/node-base:$(TAG_VERSION) .
147+
node_base: base video
148+
cd ./NodeBase && SEL_PASSWD=$(SEL_PASSWD) docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) --build-arg BASE=video --build-arg VERSION=$(FFMPEG_TAG_VERSION)-$(BUILD_DATE) --secret id=SEL_PASSWD -t $(NAME)/node-base:$(TAG_VERSION) .
148149

149150
chrome: node_base
150151
case "$(PLATFORMS)" in \
@@ -187,7 +188,7 @@ firefox: node_base
187188
cd ./NodeFirefox && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) --build-arg FIREFOX_DOWNLOAD_URL=$(FIREFOX_DOWNLOAD_URL) -t $(NAME)/node-firefox:$(TAG_VERSION) .
188189

189190
firefox_dev:
190-
cd ./NodeFirefox && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) --build-arg FIREFOX_VERSION=nightly-latest -t $(NAME)/node-firefox:dev .
191+
cd ./NodeFirefox && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) --build-arg FIREFOX_VERSION=devedition-latest -t $(NAME)/node-firefox:dev .
191192

192193
firefox_beta:
193194
cd ./NodeFirefox && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) --build-arg FIREFOX_VERSION=beta-latest -t $(NAME)/node-firefox:beta .
@@ -244,8 +245,11 @@ standalone_edge_dev: edge_dev
244245
standalone_edge_beta: edge_beta
245246
cd ./Standalone && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) --build-arg NAMESPACE=$(NAME) --build-arg VERSION=beta --build-arg BASE=node-edge -t $(NAME)/standalone-edge:beta .
246247

247-
video:
248-
cd ./Video && SEL_PASSWD=$(SEL_PASSWD) docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) --build-arg NAMESPACE=$(FFMPEG_BASED_NAME) --build-arg BASED_TAG=$(FFMPEG_BASED_TAG) --secret id=SEL_PASSWD --sbom=true --attest type=provenance,mode=max -t $(NAME)/video:$(FFMPEG_TAG_VERSION)-$(BUILD_DATE) .
248+
video: base
249+
cd ./Video && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) --build-arg FFMPEG_BASED_NAME=$(FFMPEG_BASED_NAME) --build-arg FFMPEG_BASED_TAG=$(FFMPEG_BASED_TAG) $(FROM_IMAGE_ARGS) -t $(NAME)/video:$(FFMPEG_TAG_VERSION)-$(BUILD_DATE) .
250+
251+
ffmpeg:
252+
cd ./.ffmpeg && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) --build-arg VERSION_FFMPEG=$(FFMPEG_VERSION) $(FROM_IMAGE_ARGS) -t $(NAME)/ffmpeg:$(FFMPEG_VERSION)-$(BUILD_DATE) .
249253

250254
fetch_grid_scaler_resources:
251255
mkdir -p ./.keda/scalers \
@@ -332,6 +336,10 @@ tag_and_push_edge_images:
332336
tag_and_push_firefox_images:
333337
./tag_and_push_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) firefox
334338

339+
tag_ffmpeg_latest:
340+
docker tag $(NAME)/ffmpeg:$(FFMPEG_VERSION)-$(BUILD_DATE) $(NAME)/ffmpeg:latest
341+
docker tag $(NAME)/ffmpeg:$(FFMPEG_VERSION)-$(BUILD_DATE) $(NAME)/ffmpeg:$(FFMPEG_VERSION)
342+
335343
tag_latest:
336344
docker tag $(NAME)/base:$(TAG_VERSION) $(NAME)/base:latest
337345
docker tag $(NAME)/hub:$(TAG_VERSION) $(NAME)/hub:latest
@@ -353,6 +361,11 @@ tag_latest:
353361
docker tag $(NAME)/standalone-docker:$(TAG_VERSION) $(NAME)/standalone-docker:latest
354362
docker tag $(NAME)/video:$(FFMPEG_TAG_VERSION)-$(BUILD_DATE) $(NAME)/video:latest
355363

364+
release_ffmpeg_latest:
365+
docker push $(NAME)/ffmpeg:latest
366+
docker push $(NAME)/ffmpeg:$(FFMPEG_VERSION)
367+
docker push $(NAME)/ffmpeg:$(FFMPEG_VERSION)-$(BUILD_DATE)
368+
356369
release_latest: release_grid_scaler_latest
357370
docker push $(NAME)/base:latest
358371
docker push $(NAME)/hub:latest

Diff for: NodeBase/Dockerfile

+10-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
ARG NAMESPACE=selenium
22
ARG VERSION=latest
3-
FROM ${NAMESPACE}/base:${VERSION}
3+
ARG BASE=base
4+
FROM ${NAMESPACE}/${BASE}:${VERSION}
45
ARG AUTHORS
56
LABEL authors=${AUTHORS}
67

@@ -49,6 +50,8 @@ ENV LANG_WHICH=${LANG_WHICH} \
4950
#============================
5051
# Some configuration options
5152
#============================
53+
SE_RECORD_VIDEO=false \
54+
DISPLAY_CONTAINER_NAME="localhost" \
5255
SE_SCREEN_WIDTH=1920 \
5356
SE_SCREEN_HEIGHT=1080 \
5457
SE_SCREEN_DEPTH=24 \
@@ -66,8 +69,7 @@ ENV LANG_WHICH=${LANG_WHICH} \
6669
# Following line fixes https://github.com/SeleniumHQ/docker-selenium/issues/87
6770
DBUS_SESSION_BUS_ADDRESS=/dev/null
6871

69-
RUN --mount=type=secret,id=SEL_PASSWD \
70-
apt-get update -qqy \
72+
RUN apt-get update -qqy \
7173
&& apt-get -qqy --no-install-recommends install \
7274
#==============
7375
# Xvfb
@@ -102,13 +104,13 @@ RUN --mount=type=secret,id=SEL_PASSWD \
102104
&& locale-gen ${LANGUAGE} \
103105
&& dpkg-reconfigure --frontend noninteractive locales \
104106
&& apt-get -qyy autoremove \
105-
&& rm -rf /var/lib/apt/lists/* \
106-
&& apt-get -qyy clean \
107-
&& pip install --no-cache-dir --upgrade --break-system-packages setuptools \
107+
&& rm -rf /var/lib/apt/lists/* /var/cache/apt/* \
108+
&& apt-get -qyy clean
108109
########################################
109110
# noVNC exposes VNC through a web page #
110111
########################################
111-
&& wget -nv -O noVNC.zip \
112+
RUN --mount=type=secret,id=SEL_PASSWD \
113+
wget -nv -O noVNC.zip \
112114
"https://github.com/novnc/noVNC/archive/refs/${NOVNC_SOURCE}/${NOVNC_VERSION}.zip" \
113115
&& unzip -x noVNC.zip \
114116
&& mv noVNC-${NOVNC_VERSION#v} /opt/bin/noVNC \
@@ -120,7 +122,7 @@ RUN --mount=type=secret,id=SEL_PASSWD \
120122
&& rm websockify.zip \
121123
# Setup dependencies
122124
&& cd websockify-${WEBSOCKIFY_VERSION#v} \
123-
&& python3 setup.py install \
125+
&& python3 -m pip install --break-system-packages . \
124126
# Move websockify and run to the noVNC directory
125127
&& mv websockify /opt/bin/noVNC/utils/websockify \
126128
&& mv run /opt/bin/noVNC/utils/websockify \

Diff for: NodeChrome/Dockerfile

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
ARG NAMESPACE=selenium
22
ARG VERSION=latest
3-
FROM ${NAMESPACE}/node-base:${VERSION}
3+
ARG BASE=node-base
4+
FROM ${NAMESPACE}/${BASE}:${VERSION}
45
ARG AUTHORS
56
LABEL authors=${AUTHORS}
67

Diff for: NodeChromium/Dockerfile

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
ARG NAMESPACE=selenium
22
ARG VERSION=latest
3-
FROM ${NAMESPACE}/node-base:${VERSION}
3+
ARG BASE=node-base
4+
FROM ${NAMESPACE}/${BASE}:${VERSION}
45
ARG AUTHORS
56
LABEL authors=${AUTHORS}
67

Diff for: NodeEdge/Dockerfile

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
ARG NAMESPACE=selenium
22
ARG VERSION=latest
3-
FROM ${NAMESPACE}/node-base:${VERSION}
3+
ARG BASE=node-base
4+
FROM ${NAMESPACE}/${BASE}:${VERSION}
45
ARG AUTHORS
56
LABEL authors=${AUTHORS}
67

Diff for: NodeFirefox/Dockerfile

+41-17
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
ARG NAMESPACE=selenium
22
ARG VERSION=latest
3-
FROM ${NAMESPACE}/node-base:${VERSION}
3+
ARG BASE=node-base
4+
FROM ${NAMESPACE}/${BASE}:${VERSION}
45
ARG AUTHORS
56
LABEL authors=${AUTHORS}
67

@@ -9,32 +10,55 @@ USER root
910
#============================================
1011
# Firefox cleanup script and supervisord file
1112
#============================================
12-
COPY --chown="${SEL_UID}:${SEL_GID}" firefox-cleanup.sh get_lang_package.sh /opt/bin/
13+
COPY --chown="${SEL_UID}:${SEL_GID}" firefox-cleanup.sh get_lang_package.sh install-firefox-apt.sh /opt/bin/
1314
COPY --chown="${SEL_UID}:${SEL_GID}" firefox-cleanup.conf /etc/supervisor/conf.d/firefox-cleanup.conf
14-
RUN chmod +x /opt/bin/firefox-cleanup.sh /opt/bin/get_lang_package.sh
15+
RUN chmod +x /opt/bin/firefox-cleanup.sh /opt/bin/get_lang_package.sh /opt/bin/install-firefox-apt.sh
1516

1617
#=========
1718
# Firefox
1819
#=========
1920
ARG FIREFOX_VERSION=latest
2021
ARG FIREFOX_DOWNLOAD_URL="https://download.mozilla.org/?product=firefox-nightly-latest-ssl&os=linux64-aarch64&lang=en-US"
21-
RUN if [ "$(dpkg --print-architecture)" = "amd64" ]; then \
22-
FIREFOX_DOWNLOAD_URL=$(if [ $FIREFOX_VERSION = "latest" ] || [ $FIREFOX_VERSION = "beta-latest" ] || [ $FIREFOX_VERSION = "nightly-latest" ] || [ $FIREFOX_VERSION = "devedition-latest" ] || [ $FIREFOX_VERSION = "esr-latest" ]; then echo "https://download.mozilla.org/?product=firefox-$FIREFOX_VERSION-ssl&os=linux64&lang=en-US"; else echo "https://download-installer.cdn.mozilla.net/pub/firefox/releases/$FIREFOX_VERSION/linux-x86_64/en-US/firefox-$FIREFOX_VERSION.tar.bz2"; fi) ; \
22+
RUN apt-get update -qqy && \
23+
if [ "$(dpkg --print-architecture)" = "amd64" ]; then \
24+
if [ $FIREFOX_VERSION = "latest" ] || [ $FIREFOX_VERSION = "beta-latest" ] || [ $FIREFOX_VERSION = "nightly-latest" ] || [ $FIREFOX_VERSION = "devedition-latest" ] || [ $FIREFOX_VERSION = "esr-latest" ]; then \
25+
FIREFOX_DOWNLOAD_URL="https://download.mozilla.org/?product=firefox-$FIREFOX_VERSION-ssl&os=linux64&lang=en-US"; \
26+
/opt/bin/install-firefox-apt.sh \
27+
&& FIREFOX_VERSION=$(echo "-$FIREFOX_VERSION" | sed 's/-latest//') \
28+
&& apt install -y firefox$FIREFOX_VERSION \
29+
&& INSTALL_VIA_APT=true \
30+
&& if [ $FIREFOX_VERSION = "-beta" ] || [ $FIREFOX_VERSION = "-nightly" ] || [ $FIREFOX_VERSION = "-devedition" ] || [ $FIREFOX_VERSION = "-esr" ]; then \
31+
ln -fs $(which firefox$FIREFOX_VERSION) /usr/bin/firefox ; \
32+
fi ; \
2333
else \
24-
FIREFOX_DOWNLOAD_URL="${FIREFOX_DOWNLOAD_URL}" ; \
34+
FIREFOX_DOWNLOAD_URL="https://download-installer.cdn.mozilla.net/pub/firefox/releases/$FIREFOX_VERSION/linux-x86_64/en-US/firefox-$FIREFOX_VERSION.tar.bz2" ; \
2535
fi \
26-
&& apt-get update -qqy \
27-
&& apt-get -qqy --no-install-recommends install libavcodec-extra libgtk-3-dev libdbus-glib-1-dev xz-utils \
28-
&& rm -rf /var/lib/apt/lists/* /var/cache/apt/* \
29-
&& wget --no-verbose -O /tmp/firefox.tar.bz2 $FIREFOX_DOWNLOAD_URL \
30-
&& rm -rf /opt/firefox \
31-
&& tar -C /opt -xjf /tmp/firefox.tar.bz2 || (mv /tmp/firefox.tar.bz2 /tmp/firefox.tar.xz && tar -C /opt -xJf /tmp/firefox.tar.xz) \
32-
&& rm -rf /tmp/firefox.tar.bz2 /tmp/firefox.tar.xz \
33-
&& mv /opt/firefox /opt/firefox-$FIREFOX_VERSION \
34-
&& mkdir -p /opt/firefox-$FIREFOX_VERSION/distribution/extensions \
35-
&& ln -fs /opt/firefox-$FIREFOX_VERSION/firefox /usr/bin/firefox \
36+
else \
37+
if [ $FIREFOX_VERSION = "nightly-latest" ]; then \
38+
/opt/bin/install-firefox-apt.sh \
39+
&& FIREFOX_VERSION=$(echo "-$FIREFOX_VERSION" | sed 's/-latest//') \
40+
&& apt install -y firefox$FIREFOX_VERSION \
41+
&& INSTALL_VIA_APT=true \
42+
&& if [ $FIREFOX_VERSION = "-nightly" ]; then \
43+
ln -fs $(which firefox$FIREFOX_VERSION) /usr/bin/firefox ; \
44+
fi ; \
45+
else \
46+
FIREFOX_DOWNLOAD_URL="${FIREFOX_DOWNLOAD_URL}" ; \
47+
fi ; \
48+
fi && \
49+
if [ "$INSTALL_VIA_APT" != "true" ]; then \
50+
apt-get -qqy --no-install-recommends install libavcodec-extra libgtk-3-dev libdbus-glib-1-dev xz-utils \
51+
&& wget --no-verbose -O /tmp/firefox.tar.bz2 $FIREFOX_DOWNLOAD_URL \
52+
&& rm -rf /opt/firefox \
53+
&& tar -C /opt -xjf /tmp/firefox.tar.bz2 || (mv /tmp/firefox.tar.bz2 /tmp/firefox.tar.xz && tar -C /opt -xJf /tmp/firefox.tar.xz) \
54+
&& rm -rf /tmp/firefox.tar.bz2 /tmp/firefox.tar.xz \
55+
&& mv /opt/firefox /opt/firefox-$FIREFOX_VERSION \
56+
&& mkdir -p /opt/firefox-$FIREFOX_VERSION/distribution/extensions \
57+
&& ln -fs /opt/firefox-$FIREFOX_VERSION/firefox /usr/bin/firefox ; \
58+
fi \
3659
# Download the language pack for Firefox
37-
&& /opt/bin/get_lang_package.sh
60+
&& /opt/bin/get_lang_package.sh \
61+
&& rm -rf /var/lib/apt/lists/* /var/cache/apt/*
3862

3963
#============
4064
# GeckoDriver

0 commit comments

Comments
 (0)