Outils pour utilisateurs

Outils du site


tutoriaux:docker-related:creer-container-86box

Ceci est une ancienne révision du document !


86box - PC vintage dans un docker

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…

le planning

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.

  1. #
  2. # 86Box
  3. #
  4.  
  5. FROM saintfrater/basic-debian:latest

Paramétrage du serveur VNC

  1. #User Settings for VNC
  2. ENV USER=root
  3. ENV PASSWORD=password1

Quelques variables d'ajustement

  1. #Variables for installation
  2. ENV DEBIAN_FRONTEND=noninteractive
  3. ENV DEBCONF_NONINTERACTIVE_SEEN=true
  4. 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).

  1. # Download & Setup 86Box
  2. RUN mkdir /opt/86box && \
  3. cd /opt/86box && \
  4. wget https://github.com/86Box/86Box/releases/download/v4.1.1/86Box-Linux-x86_64-b5634.AppImage && \
  5. mv 86Box-Linux-x86_64-b5634.AppImage 86Box.AppImage && \
  6. chmod +x 86Box.AppImage && \
  7. ./86Box.AppImage --appimage-extract && \
  8. 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:

  1. RUN apt-get install -y git
  2. # Download BIOSes into 'roms' ~133MB
  3. RUN cd /opt/86box/squashfs-root && \
  4. git clone https://github.com/86Box/roms.git
  5. 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

  1. # Create symlink for configuration
  2. RUN mkdir /opt/86box/customs && \
  3. touch /opt/86box/customs/86box.cfg && \
  4. 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.

  1. # Configure VNCServer
  2. RUN mkdir ~/logs/ && \
  3. mkdir ~/.vnc/ && \
  4. echo $PASSWORD | /opt/TurboVNC/bin/vncpasswd -f > ~/.vnc/passwd && \
  5. 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.

  1. # Configure application launch
  2. RUN echo "set border 0" > ~/.ratpoisonrc && \
  3. 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

  1. # Create volumes mount
  2. VOLUME /root/logs
  3. VOLUME /opt/86box/customs
  4. VOLUME /opt/86box/squashfs-root/nvr
  5. VOLUME /opt/86box/squashfs-root/media

Supervisord

l'image d'origine utilise également supervisord pour lancer des taches “de fond”, comme le serveur VNC.

  1. #Copy in supervisor configuration for startup
  2. COPY supervisord.conf /etc/supervisor/supervisord.conf
  3. ENTRYPOINT [ "supervisord", "-c", "/etc/supervisor/supervisord.conf" ]

Monter le port VNC

  1. EXPOSE 5901
tutoriaux/docker-related/creer-container-86box.1721155648.txt.gz · Dernière modification : 2024/07/16 20:47 de frater