Outils pour utilisateurs

Outils du site


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

EmulDock-86box - PC vintage

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.

le dockerfile

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. FROM saintfrater/basic-debian:latest
  5. ARG LOCAL_USER=emulator
  6.  
  7. # Create non root group & user
  8. RUN adduser $LOCAL_USER

Nous allons également executer l'application avec un utilisateur non-root.

Cet utilisateur est créer en ligne 8.

Paramétrage du serveur VNC

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

Ici l'on peut changer le mot de passe “par défaut” du container, il sera possible de changer 'en permanent' en utilisant un volume (voir plus bas).

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 -nv 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 > null && \
  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é a conserver ce fichier.

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. mkdir /opt/86box/media && \
  4. chown -R $LOCAL_USER:$LOCAL_USER /opt/86box/customs && \
  5. chown -R $LOCAL_USER:$LOCAL_USER /opt/86box/media && \
  6. mkdir /var/log/86box && \
  7. chown -R $LOCAL_USER:$LOCAL_USER /var/log/86box

Nous créons 2 dossiers customs et media qui seront ensuite publiés en dehors du container pour sauvegarder les données de façons permanentes.

Un dossier “/var/log/86box” est également créer pour recevoir les logs applicatifs.

supervisor et publication de port

  1. #Copy in supervisor configuration for startup
  2. COPY supervisord.conf /etc/supervisor/supervisord.conf

nous copions une version personnalisée de supervisord.conf dans etc.

  1. EXPOSE 5901

Nous exposons le port 5901 (VNC) du container.

configuration du mode 'local user'

Comme nous désirons que l'application ne s'execute pas en mode 'root'; nous continuons sous l'utilisateur définit par l'argument “LOCAL_USER”.

  1. # setup session as "LOCAL_USER", not root
  2. USER $LOCAL_USER

Configuration VNC Server

Par défaut le password est password1, 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 fenêtre très intéressant, il n'a pas besoin de souris pour fonctionner, et en plus, il offre des possibilités de scripting/ configuration et d'automation 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) afin de ne pas avoir de cadre a notre application, ensuite nous ordonnons a ratpoison d'executer l'émulateur.

Quelques volumes

  1. # Create volumes mount
  2. # VOLUME /var/log/86box
  3. VOLUME /opt/86box/customs
  4. VOLUME /opt/86box/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. ENTRYPOINT [ "supervisord", "-c", "/etc/supervisor/supervisord.conf" ]

Configuration

Si tout se passe bien, vous devirez pouvoir vous connecter en VNC sur votre 86Box, au premier contact l'écran doit ressembler a ceci:

je vous suggère immédiatement de changer le paramètre:

pour utiliser tout l'écran, vous pouvez également utiliser de l'openGL (qui est installé)

tutoriaux/docker-related/creer-container-86box.txt · Dernière modification : 2024/07/18 15:19 de frater