Открываем Adobe Flash в Docker в 2024-м
Шарился я тут в по Интернету в поисках видео событий 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