Открываем Adobe Flash в Docker в 2024-м

fd67e579f0976f1ffffeac911f67d9b0.png

Шарился я тут в по Интернету в поисках видео событий 15-летний давности и нашел что-то вроде искомого, но никак не смог посмотреть — требовался Adobe Flash. Погуглил я как мне открыть это видео, но рабочих вариантов не нашел. «Ладно» — подумал я: «Challenge accepted». А нам с читателем лишняя возможность потренироваться в создании Docker-контейнеров.

Дисклеймер: использование устаревших версий браузера и самого Flash-плагина несёт потенциальную угрозу безопасности. Используйте этот метод на свой страх и риск.

Итак, начнём с того, что поддержка Flash-плагина была выпилена в Chromium начиная с версии 89. То есть нам нужно что-то где есть более ранняя версия. Это что-то — это Ubuntu 18.04 — там 65я версия, если без апдейтов, а с апдейтами 112-я. В какой-то момент должна была быть и 88-ая, но не нашел где её добыть — если читатель подскажет, буду безмерно благодарен. И так, поехали — создаём Dockerfile

FROM ubuntu:18.04

ARG DEBIAN_FRONTEND=noninteractive
ARG CHROMIUM_VERSION=65.0.3325.181-0ubuntu1

RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y \
    chromium-browser=$CHROMIUM_VERSION \
    chromium-browser-l10n=$CHROMIUM_VERSION \
    chromium-codecs-ffmpeg-extra=$CHROMIUM_VERSION \
    apt-get clean && rm -rf /var/lib/apt/lists/* /var/cache/*

Берем официальный образ ubuntu:18.04 за основу. Получаем список пакетов, устанавливаем обновления и ставим собственно браузер явным образом указывая версию — иначе установится последняя (на момент написания статьи) 112-я.

Последняя (12-я) строчка занимается тем, что удаляет из данного «слоя» скаченные deb-файлы и кэши, необходимые команде apt. В работе с контейнерами это правило хорошего тона.

Запускать будем под юзером, иначе Chromium будет ругаться. Создадим его, но без пароля:

RUN adduser --gecos "user" --disabled-password --shell /bin/bash user

Скачаем собственно архив с последней версией Flash-плагина для Chromium’а, который наудачу сохранили в Архиве Интернета:

ADD https://web.archive.org/web/20210000000000id_/https://fpdownload.adobe.com/get/flashplayer/pdc/32.0.0.465/flash_player_ppapi_linux.x86_64.tar.gz /tmp

Обращаю ваше внимание на полезное свойство директивы ADD, о котором многие забывают — добавлять можно не только файлы из локального Docker-контекста, но и с произвольного URL’а.

Далее собезъяничаем некоторые телодвижения и конфиги из некогда существовавшего пакета pepperflashplugin-nonfree:

COPY etc /etc

RUN mkdir -p /usr/lib/pepperflashplugin-nonfree && \
    tar -xz -f /tmp/flash_player_ppapi_linux.x86_64.tar.gz -C /usr/lib/pepperflashplugin-nonfree libpepflashplayer.so manifest.json && \
	chown root:root /usr/lib/pepperflashplugin-nonfree/libpepflashplayer.so && \
	chmod 644 /usr/lib/pepperflashplugin-nonfree/libpepflashplayer.so && \
	chown root:root /usr/lib/pepperflashplugin-nonfree/manifest.json && \
	chmod 644 /usr/lib/pepperflashplugin-nonfree/manifest.json

Устанавливаем DISPLAY для X-сервера

ENV DISPLAY=:0

И, казалось бы, можно запускать Сhromium, но, сделав так, упрёмся в первую неприятность: плагин будет проверять текущее время и, если оно перевалило за какое-то там января 2021-го года, то он откажется работать. Поэтому со временем надо его обмануть, для этого в список устанавливаемых пакетов вместе с Chromium’ом необходимо включить пакет faketime. Запустив Chromium из-под faketime, мы столкнемся с другой проблемой — сертификаты SSL не будут проходить проверку, так как все он выданы в будущем (для нашего фейкового времени). Посему придется игнорировать ошибки сертификатов параметром браузера --ignore-certificate-errors. В итоге получаем следующую точку входа в контейнер

CMD ["/usr/bin/faketime", "2020-12-24 08:15:42", "/usr/bin/chromium-browser", "--ignore-certificate-errors"]

Собираем Docker-образ, например, следующей командой:

docker build -t flash-image  .

И запускаем это дело следующей командой:

docker run -it --rm --user user:user -v /tmp/.X11-unix/:/tmp/.X11-unix  --cap-add SYS_ADMIN flash-image

А вот и страничка хроник суровых будней российских, на которой это можно проверить: https://www.zaks.ru/new/archive/view/68760

Целиком это всё можно в готовом виде забрать в репозитории https://github.com/dmitrmax/flash-in-docker

© Habrahabr.ru