FROM ubuntu:focal ENV HOME /root ENV DEBIAN_FRONTEND noninteractive ENV LC_ALL C.UTF-8 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US.UTF-8 ENV WINEARCH win64 ENV DISPLAY :0 ENV WINEPREFIX /root/prefix32 ENV AOTDIR "$WINEPREFIX/drive_c/Program Files (x86)/AgeOfTime" ENV RESOLUTION "1024x768x24" ENV AOT_CPU_LIMIT="0" WORKDIR /root/ COPY webaudio.js /root/ RUN dpkg --add-architecture i386 && \ apt-get update && apt-get -y install python2 python-is-python2 xvfb x11vnc xdotool wget tar supervisor net-tools fluxbox gnupg2 && \ wget -O - https://dl.winehq.org/wine-builds/winehq.key | apt-key add - && \ echo 'deb https://dl.winehq.org/wine-builds/ubuntu/ focal main' |tee /etc/apt/sources.list.d/winehq.list && \ apt-get update && apt-get -y install \ wmctrl \ winehq-stable \ # libgl1:i386 bzip2 \ # gstreamer1.0-plugins-good \ # gstreamer1.0-pulseaudio \ # gstreamer1.0-tools \ # libglu1-mesa \ # libgtk2.0-0 \ # libncursesw5 \ # libopenal1 \ # libsdl-image1.2 \ # libsdl-ttf2.0-0 \ # libsdl1.2debian \ # libsndfile1 \ pulseaudio \ cpulimit && \ mkdir /opt/wine-stable/share/wine/mono && wget -O - https://dl.winehq.org/wine/wine-mono/9.0.0/wine-mono-9.0.0-x86.tar.xz | tar -xJv -C /opt/wine-stable/share/wine/mono && \ apt-get -y full-upgrade && apt-get clean && rm -rf /var/lib/apt/lists/* && \ # install mono for wine wget -P /mono https://dl.winehq.org/wine/wine-mono/9.0.0/wine-mono-9.0.0-x86.msi && \ wineboot -i -f -u && \ sleep 10 && \ xvfb-run msiexec /i /mono/wine-mono-9.0.0-x86.msi /quiet && \ rm -rf /mono/wine-mono-9.0.0-x86.msi && \ # done with wine stuff # download and install AgeOfTime cd /root && \ wget https://ageoftime.com/files/AgeOfTime-29.exe && \ cd "$WINEPREFIX/drive_c/" && \ chmod +x /root/AgeOfTime-29.exe && \ xvfb-run wine /root/AgeOfTime-29.exe -s && \ rm -f /root/AgeOfTime-29.exe && \ # install noVNC \ wget -O - https://github.com/novnc/noVNC/archive/v1.1.0.tar.gz | tar -xzv -C /root/ && mv /root/noVNC-1.1.0 /root/novnc && ln -s /root/novnc/vnc_lite.html /root/novnc/index.html && \ wget -O - https://github.com/novnc/websockify/archive/v0.9.0.tar.gz | tar -xzv -C /root/ && mv /root/websockify-0.9.0 /root/novnc/utils/websockify && \ # install noVNC audio patch # Force vnc_lite.html to be used for novnc, to avoid having the directory listing page. # Additionally, turn off the control bar. Finally, add a hook to start audio. mv /root/webaudio.js /root/novnc/core/webaudio.js && \ rm -f /root/novnc/index.html && ln -s /root/novnc/vnc_lite.html /root/novnc/index.html && \ sed -i 's/display:flex/display:none/' /root/novnc/app/styles/base.css && \ sed -i "/import RFB/a \ import WebAudio from './core/webaudio.js'" \ /root/novnc/vnc_lite.html && \ sed -i "/function connected(e)/a \ var wa = new WebAudio('ws://localhost:8081/websockify'); \ document.getElementsByTagName('canvas')[0].addEventListener('keydown', e => { wa.start(); });" \ /root/novnc/vnc_lite.html COPY aot-monitor.sh /root/aot-monitor.sh COPY start-aot.sh /root/start-aot.sh COPY start.sh /root/start.sh RUN chmod +x /root/*.sh && \ ln -s "$AOTDIR" /root/AgeOfTime ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf EXPOSE 8080 USER root CMD ["/root/start.sh"]