From 1cc2d2ff5f9b067fad5c8b73426cd0e2f059dfe2 Mon Sep 17 00:00:00 2001 From: Viet Nguyen Duc Date: Mon, 2 Dec 2024 21:32:05 +0700 Subject: [PATCH 1/2] Docker: Update Firefox binary installed directory Signed-off-by: Viet Nguyen Duc --- Makefile | 3 ++- NodeFirefox/Dockerfile | 35 ++++++++++++++++++----------------- README.md | 2 +- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/Makefile b/Makefile index 01443f95fd..8743a53ca2 100644 --- a/Makefile +++ b/Makefile @@ -25,6 +25,7 @@ CURRENT_PLATFORM := $(shell if [ `arch` = "aarch64" ] || [ `arch` = "arm64" ]; t PLATFORMS := $(or $(PLATFORMS),$(shell echo $$PLATFORMS),$(CURRENT_PLATFORM)) SEL_PASSWD := $(or $(SEL_PASSWD),$(SEL_PASSWD),secret) CHROMIUM_VERSION := $(or $(CHROMIUM_VERSION),$(CHROMIUM_VERSION),latest) +FIREFOX_DOWNLOAD_URL := $(or $(FIREFOX_DOWNLOAD_URL),$(FIREFOX_DOWNLOAD_URL),https://download-installer.cdn.mozilla.net/pub/firefox/nightly/2024/10/2024-10-28-09-56-35-mozilla-central/firefox-133.0a1.en-US.linux-aarch64.tar.bz2) SBOM_OUTPUT := $(or $(SBOM_OUTPUT),$(SBOM_OUTPUT),package_versions.txt) KEDA_TAG_PREV_VERSION := $(or $(KEDA_TAG_PREV_VERSION),$(KEDA_TAG_PREV_VERSION),2.16.0-selenium-grid) KEDA_TAG_VERSION := $(or $(KEDA_TAG_VERSION),$(KEDA_TAG_VERSION),2.16.0-selenium-grid) @@ -183,7 +184,7 @@ edge_beta: cd ./NodeEdge && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) --build-arg EDGE_VERSION=microsoft-edge-beta -t $(NAME)/node-edge:beta . firefox: node_base - cd ./NodeFirefox && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) -t $(NAME)/node-firefox:$(TAG_VERSION) . + 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) . firefox_dev: cd ./NodeFirefox && docker buildx build --platform $(PLATFORMS) $(BUILD_ARGS) $(FROM_IMAGE_ARGS) --build-arg FIREFOX_VERSION=nightly-latest -t $(NAME)/node-firefox:dev . diff --git a/NodeFirefox/Dockerfile b/NodeFirefox/Dockerfile index 0271e790aa..ed5f74e024 100644 --- a/NodeFirefox/Dockerfile +++ b/NodeFirefox/Dockerfile @@ -6,25 +6,35 @@ LABEL authors=${AUTHORS} USER root +#============================================ +# Firefox cleanup script and supervisord file +#============================================ +COPY --chown="${SEL_UID}:${SEL_GID}" firefox-cleanup.sh get_lang_package.sh /opt/bin/ +COPY --chown="${SEL_UID}:${SEL_GID}" firefox-cleanup.conf /etc/supervisor/conf.d/firefox-cleanup.conf +RUN chmod +x /opt/bin/firefox-cleanup.sh /opt/bin/get_lang_package.sh + #========= # Firefox #========= ARG FIREFOX_VERSION=latest +ARG FIREFOX_DOWNLOAD_URL="https://download.mozilla.org/?product=firefox-nightly-latest-ssl&os=linux64-aarch64&lang=en-US" RUN if [ "$(dpkg --print-architecture)" = "amd64" ]; then \ 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) ; \ else \ - FIREFOX_DOWNLOAD_URL="https://download.mozilla.org/?product=firefox-nightly-latest-ssl&os=linux64-aarch64&lang=en-US" ; \ + FIREFOX_DOWNLOAD_URL="${FIREFOX_DOWNLOAD_URL}" ; \ fi \ && apt-get update -qqy \ && apt-get -qqy --no-install-recommends install libavcodec-extra libgtk-3-dev libdbus-glib-1-dev \ - && rm -rf /var/lib/apt/lists/* /var/cache/apt/* ${HOME}/firefox \ + && rm -rf /var/lib/apt/lists/* /var/cache/apt/* \ && wget --no-verbose -O /tmp/firefox.tar.bz2 $FIREFOX_DOWNLOAD_URL \ - && tar -C ${HOME} -xjf /tmp/firefox.tar.bz2 \ + && rm -rf /opt/firefox \ + && tar -C /opt -xjf /tmp/firefox.tar.bz2 || tar -C /opt -xJf /tmp/firefox.tar.bz2 \ && rm /tmp/firefox.tar.bz2 \ - && mkdir -p ${HOME}/firefox/distribution/extensions \ - && setfacl -Rm u:${SEL_USER}:rwx ${HOME}/firefox \ - && setfacl -Rm g:${SEL_GROUP}:rwx ${HOME}/firefox \ - && ln -fs ${HOME}/firefox/firefox /usr/bin/firefox + && mv /opt/firefox /opt/firefox-$FIREFOX_VERSION \ + && mkdir -p /opt/firefox-$FIREFOX_VERSION/distribution/extensions \ + && ln -fs /opt/firefox-$FIREFOX_VERSION/firefox /usr/bin/firefox \ + # Download the language pack for Firefox + && /opt/bin/get_lang_package.sh #============ # GeckoDriver @@ -42,13 +52,6 @@ RUN LATEST_VERSION=$(curl -sk https://api.github.com/repos/mozilla/geckodriver/r && chmod 755 /opt/geckodriver-$GK_VERSION \ && ln -fs /opt/geckodriver-$GK_VERSION /usr/bin/geckodriver -#============================================ -# Firefox cleanup script and supervisord file -#============================================ -COPY --chown="${SEL_UID}:${SEL_GID}" firefox-cleanup.sh get_lang_package.sh /opt/bin/ -COPY --chown="${SEL_UID}:${SEL_GID}" firefox-cleanup.conf /etc/supervisor/conf.d/firefox-cleanup.conf -RUN chmod +x /opt/bin/firefox-cleanup.sh /opt/bin/get_lang_package.sh - USER ${SEL_UID} #============================================ @@ -56,8 +59,6 @@ USER ${SEL_UID} #============================================ RUN echo "firefox" > /opt/selenium/browser_name \ && firefox --version | awk '{print $3}' > /opt/selenium/browser_version \ - && echo "\"moz:firefoxOptions\": {\"binary\": \"/usr/bin/firefox\"}" > /opt/selenium/browser_binary_location \ - # Download the language pack for Firefox - && /opt/bin/get_lang_package.sh + && echo "\"moz:firefoxOptions\": {\"binary\": \"/usr/bin/firefox\"}" > /opt/selenium/browser_binary_location ENV SE_OTEL_SERVICE_NAME="selenium-node-firefox" diff --git a/README.md b/README.md index 4e66eca49d..ee3db80bd9 100644 --- a/README.md +++ b/README.md @@ -1312,7 +1312,7 @@ FIREFOX_VERSION=$(docker run --rm --entrypoint="" selenium/node-firefox:latest f && ./NodeFirefox/get_lang_package.sh ${FIREFOX_VERSION} /local/path/to/download ``` -Or, you can mount the container directory `/home/seluser/firefox/distribution/extensions` to host directory to access packs were pre-built in the container for using in your test script. +Or, you can mount the container directory `$(readlink -f $(which firefox)))/distribution/extensions` to host directory to access packs were pre-built in the container for using in your test script. ## Managing processes in container From 6ac3451198b8de600a5830f45d3af0b23d39e675 Mon Sep 17 00:00:00 2001 From: Viet Nguyen Duc Date: Tue, 3 Dec 2024 11:27:41 +0700 Subject: [PATCH 2/2] Update README Signed-off-by: Viet Nguyen Duc --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ee3db80bd9..aaae095c35 100644 --- a/README.md +++ b/README.md @@ -153,7 +153,7 @@ $ docker run --rm -it -p 4444:4444 -p 5900:5900 -p 7900:7900 --shm-size 2g selen ``` - Mozilla Firefox now is available for Linux/ARM64 via [Nightly channel](https://blog.nightly.mozilla.org/2024/04/19/firefox-nightly-now-available-for-linux-on-arm64/). -The Firefox version in ARM64 will be different with the AMD64 until the stable release is available. The Firefox (node and standalone) images are available in multi-arch. +The Firefox version in ARM64 will be different with the AMD64 until the stable release is available (Noted: we had workaround by pinning the versions getting from [Firefox download installer](https://download-installer.cdn.mozilla.net/pub/firefox/nightly/). The Firefox (node and standalone) images are available in multi-arch. Multi-arch images are tested on CircleCI with resource class Linux/ARM64. See the status below.