Ceci est une ancienne révision du document !
Ce n'est un secret pour personne, j'ai toujours aimé les ordinateurs, et je gardes de merveilleux souvenirs de chacun d'eux (SpectraVideo, C64, PC286, Amiga, etc.). Je considère que je vis une époque formidable, car les machines d'aujourd'hui font fonctionner celles d'hier (et d'avant).
En surfant sur youtube, j'ai fini par découvrir qu'il était possible d'héberger une machine vintage dans un container, la vidéo est très didactique, mais prends quelques libertés avec l'optimisation.
Je ne veux pas d'une image ubuntu, j'ai une vrai préférence pour debian, et dans le build de la vidéo, il y a beaucoup de chose qui me dérange (un serveur web par exemple) ou qui sont liée à l'idée de faire tourner l'émulateur via un browser web (novnc, si tu m'entends :D).
Voici donc mon interprétation de cette idée…
J'ai commencé par consulter le build de base (disponible ici)
On va retirer tout ce qui relève de la partie web streaming du vnc (novnc, gstreamer1.0-tools, etc.) mais aussi des redondances (tightvncserver, mesa, etc.) alors qu'on va installer des packages spécifiques. En parlant de packages, la vidéo télécharge des packages directement sans utiliser les packages managers; ce qui me désole également.
toutes mes images sont disponibles sur mon dockerhub.
Je vais donc exposer mon dockerfile
bloc par bloc pour y expliquer la logique.
les lignes sont numérotés par “bloc” pour pouvoir expliquer en détail ce qui s'y passe.
Image de base
Cette image est une customisation que j'ai faites, je publierais sans doute un article plus tard, tant cette customisation est avancée.
# # 86Box # FROM saintfrater/basic-debian:latest
Paramétrage du serveur VNC
#User Settings for VNC ENV USER=root ENV PASSWORD=password1
Quelques variables d'ajustement
#Variables for installation ENV DEBIAN_FRONTEND=noninteractive ENV DEBCONF_NONINTERACTIVE_SEEN=true ENV XKB_DEFAULT_RULES=base
Téléchargement de l'AppImage
Une AppImage est sans doute le moyen le plus rapide d'installer une application qui n'existe pas en dépôt.
Dans l'image d'origine, cette AppImage était téléchargée dans le /
du container et ce n'est pas ce que je trouve propre, je propose donc de l'installer dans /opt/86box
, et d'y ajuster les configurations (ligne 2-3).
# Download & Setup 86Box RUN mkdir /opt/86box && \ cd /opt/86box && \ wget https://github.com/86Box/86Box/releases/download/v4.1.1/86Box-Linux-x86_64-b5634.AppImage && \ mv 86Box-Linux-x86_64-b5634.AppImage 86Box.AppImage && \ chmod +x 86Box.AppImage && \ ./86Box.AppImage --appimage-extract && \ rm 86Box.AppImage
Nous téléchargeons une version particulière de l'AppImage (ligne 4); il serait intéressant d'automatiser la “lecture” de cette version, sans doute pour une prochaine release.
Cette AppImage est rendue exécutable (ligne 6) et exécutée pour forcer l'extraction dans le dossier, on peut ensuite effacer le AppImage (ligne 8) car il n'a plus d'utilité.
Téléchargement des BIOS
Un PC ne peut démarrer sans BIOS, nous allons donc télécharger les BIOS depuis le github de 86box:
RUN apt-get install -y git # Download BIOSes into 'roms' ~133MB RUN cd /opt/86box/squashfs-root && \ git clone https://github.com/86Box/roms.git RUN apt-get purge -y git
Pour ce faire, nous avons besoin des outils git sur l'image (ligne 1); nous clonons ensuite les BIOS dans le répertoire /roms
de notre installation (ligne 3-4); nous finissons par purger de l'image les applications git.
Préparation des dossiers de configuration
# Create symlink for configuration RUN mkdir /opt/86box/customs && \ touch /opt/86box/customs/86box.cfg && \ ln -s /opt/86box/customs/86box.cfg /opt/86box/squashfs-root/86box.cfg
Cette immonde usine a gaz, permet de stocker le fichier config dans un folder “permanent”;
Configuration VNC Server
par défaut le password est celui passé en variable d’environnement, il pourra être changer par la suite.
# Configure VNCServer RUN mkdir ~/logs/ && \ mkdir ~/.vnc/ && \ echo $PASSWORD | /opt/TurboVNC/bin/vncpasswd -f > ~/.vnc/passwd && \ chmod 0600 ~/.vnc/passwd
configuration de ratpoison
RatPoison est sans doute l'une des découvertes les plus utile de ce tuto: c'est un gestionnaire de fenetre très intéressant, il n'a pas besoin de souris pour fonctionner, et en plus, il offre des possibilité de scripting/configuration avancées.
# Configure application launch RUN echo "set border 0" > ~/.ratpoisonrc && \ echo "exec cd /opt/86box/squashfs-root && EMU86BOX_MOUSE=evdev ./AppRun">> ~/.ratpoisonrc
Nous réduisons à 0 la bordure des applications (ligne 2), ensuite nous ordonnons a ratpoison d'executer l'émulateur.
Quelques volumes
# Create volumes mount VOLUME /root/logs VOLUME /opt/86box/customs VOLUME /opt/86box/squashfs-root/nvr VOLUME /opt/86box/squashfs-root/media
Supervisord
l'image d'origine utilise également supervisord pour lancer des taches “de fond”, comme le serveur VNC.
#Copy in supervisor configuration for startup COPY supervisord.conf /etc/supervisor/supervisord.conf ENTRYPOINT [ "supervisord", "-c", "/etc/supervisor/supervisord.conf" ]
Monter le port VNC
EXPOSE 5901