Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.

Gowstream

De Le Wiki de Lug

LXC Debian

Source

Prérequis

  • LXC avec Privilèges et Nesting

Installation

Virtual devices support

Source

Depuis le serveur :

# vi /etc/udev/rules.d/85-wolf-virtual-inputs.rules
# Allows Wolf to acces /dev/uinput (only needed for joypad support)
KERNEL=="uinput", SUBSYSTEM=="misc", MODE="0660", GROUP="input", OPTIONS+="static_node=uinput", TAG+="uaccess"

# Allows Wolf to access /dev/uhid (only needed for DualSense emulation)
KERNEL=="uhid", GROUP="input", MODE="0660", TAG+="uaccess"

# Joypads
KERNEL=="hidraw*", ATTRS{name}=="Wolf PS5 (virtual) pad", GROUP="input", MODE="0660", ENV{ID_SEAT}="seat9"
SUBSYSTEMS=="input", ATTRS{name}=="Wolf X-Box One (virtual) pad", MODE="0660", ENV{ID_SEAT}="seat9"
SUBSYSTEMS=="input", ATTRS{name}=="Wolf PS5 (virtual) pad", MODE="0660", ENV{ID_SEAT}="seat9"
SUBSYSTEMS=="input", ATTRS{name}=="Wolf gamepad (virtual) motion sensors", MODE="0660", ENV{ID_SEAT}="seat9"
SUBSYSTEMS=="input", ATTRS{name}=="Wolf Nintendo (virtual) pad", MODE="0660", ENV{ID_SEAT}="seat9"

On redémarre le serveur ou l'on charge la configuration avec la commande :

# udevadm control --reload-rules && udevadm trigger

NVidia

Après création du conteneur, depuis le serveur :

# vi /etc/pve/lxc/100.conf
...
dev0: /dev/uinput
dev1: /dev/uhid
dev2: /dev/nvidia0
dev3: /dev/nvidiactl
dev4: /dev/nvidia-modeset
dev5: /dev/nvidia-uvm
dev6: /dev/nvidia-uvm-tools
dev7: /dev/nvidia-caps/nvidia-cap1
dev8: /dev/nvidia-caps/nvidia-cap2
lxc.cgroup2.devices.allow: a
lxc.cap.drop:
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
lxc.mount.entry: /run/udev mnt/udev none bind,optional,create=dir
lxc.mount.entry: /dev mnt/dev none bind,optional,create=dir

On démarre le LXC, ensuite depuis le LXC :

# apt update && apt upgrade

On installe le pilote NVidia (référence), exemple :

# bash /opt/nvidia-driver/NVIDIA-Linux-x86_64-590.48.01.run --no-kernel-module
# bash /opt/nvidia-driver/nvidia-patch/patch.sh
# bash /opt/nvidia-driver/nvidia-patch/patch-fbc.sh

On installe docker et docker-compose :

# apt install docker.io docker-compose-plugin curl

On install le docker NVidia :

# cd /opt/
# curl https://raw.githubusercontent.com/games-on-whales/gow/master/images/nvidia-driver/Dockerfile | docker build -t gow/nvidia-driver:latest -f - --build-arg NV_VERSION=$(cat /sys/module/nvidia/version) .
# docker create --rm --mount source=nvidia-driver-vol,destination=/usr/nvidia gow/nvidia-driver:latest sh

On installe le conteneur de GOW :

# mkdir /opt/gow
# cd /opt/gow/
# vi docker-compose.yml
version: "3"
services:
  wolf:
    image: ghcr.io/games-on-whales/wolf:stable
    environment:
      - NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol
      #- WOLF_RENDER_NODE=/dev/dri/renderD12X  ##pour multiGPU
    volumes:
      - /etc/wolf/:/etc/wolf:rw
      - /var/run/docker.sock:/var/run/docker.sock:rw
      - /mnt/udev:/run/udev:rw
      - /mnt/dev:/dev:rw
      - nvidia-driver-vol:/usr/nvidia:rw
    devices:
      - /dev/dri
      - /dev/uinput
      - /dev/uhid
      - /dev/nvidia-uvm
      - /dev/nvidia-uvm-tools
      - /dev/nvidia-caps/nvidia-cap1
      - /dev/nvidia-caps/nvidia-cap2
      - /dev/nvidiactl
      - /dev/nvidia0
      - /dev/nvidia-modeset
    device_cgroup_rules:
      - 'c 13:* rmw'
    network_mode: host
    restart: unless-stopped

volumes:
  nvidia-driver-vol:
    external: true
# docker compose up -d

Autoriser client

Lors de la première tentative de connexion d'un client il faut rentrer le pin dans un lien web pour l'autoriser, depuis le LXC :

# docker ps

Exemple :

CONTAINER ID   IMAGE                                       COMMAND            CREATED          STATUS          PORTS      NAMES
c5e43d2fc724   ghcr.io/games-on-whales/pulseaudio:master   "/entrypoint.sh"   29 minutes ago   Up 29 minutes   4713/tcp   WolfPulseAudio
c581ab5d8827   ghcr.io/games-on-whales/wolf:stable         "/entrypoint.sh"   29 minutes ago   Up 29 minutes              opt-wolf-1
# docker logs opt-wolf-1
...
... Insert pin at http://192.168.1.123:47989/pin/#EXEMPLE
...

Configuration

Par défaut :

WOLF_CFG_FILE=/etc/wolf/cfg/config.toml
# vi /etc/wolf/cfg/config.toml

Monter un dossier dans une app

Exemple avec Pegasus : (source)

# vi /etc/wolf/cfg/config.toml

Modifier :

    [[profiles.apps]]
    icon_png_path = 'https://games-on-whales.github.io/wildlife/apps/pegasus/assets/icon.png'
    start_virtual_compositor = true
    title = 'Pegasus'

        [profiles.apps.runner]
        base_create_json = {
  "HostConfig": {
    "IpcMode": "host",
    "CapAdd": ["NET_RAW", "MKNOD", "NET_ADMIN", "SYS_ADMIN", "SYS_NICE"],
    "Privileged": false,
    "DeviceCgroupRules": ["c 13:* rmw", "c 244:* rmw"]
  }
}

        devices = []
        env = [ 'RUN_SWAY=1', 'GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia*' ]
        image = 'ghcr.io/games-on-whales/pegasus:edge'
        mounts = []
        name = 'WolfPegasus'
        ports = []
        type = 'docker'

Par, exemple :

         ...
         devices = []
         env = [ 'RUN_SWAY=1', 'GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia*' ]
         image = 'ghcr.io/games-on-whales/pegasus:edge'
         mounts = [
             "/mnt/Emulation/resources:/assets/romm/resources:ro",# exemple de compatibilite avec assets ROMM
             "/mnt/Emulation/bios/retroarchbioses:/home/retro/bioses:ro",# pack de bios pour retroarch
             "/mnt/Emulation/roms:/ROMs:ro"# roms dans le dossier par default, a ajouter dans le menu de Pegasus pour certains dossiers..
         ]
         name = 'WolfPegasus'
         ports = []
         ...

On redémarre le conteneur :

# docker restart opt-wolf-1

Montage utile pour Pegasus

Installer des bin d'émulateur :

"/opt/emulator:/opt/emulator:rw",

Artwork pour Game and Watch (mame) ( exemple avec "/mnt/Emulation/bios/retroarchbioses:/home/retro/bioses:ro") :

# mkdir -p /mnt/Emulation/bios/retroarchbioses/mame
# ln -s /mnt/Emulation/roms/g-and-w_artwork /mnt/Emulation/bios/retroarchbioses/mame/artwork

Importer un thème dans Pegasus

# cd /etc/wolf/profile-data/user/WolfPegasus/.config/pegasus-frontend/themes/ 

Exemple avec "gameOS" (normalement déjà présent..) :

# wget https://github.com/PlayingKarrde/gameOS/archive/master.zip
# unzip master.zip

convertir les gamelist.xml en metadata.txt

Voir ce lien

Games on Whales / Wolf : recréer le volume NVIDIA après mise à jour du pilote

Après une mise à jour du pilote NVIDIA sur l’hôte, Games on Whales / Wolf peut ne plus produire de vidéo dans Moonlight, avec un symptôme du type :

No video received from host

La cause fréquente est un décalage entre :

  • la version du pilote NVIDIA chargée sur l’hôte ;
  • les bibliothèques NVIDIA stockées dans le volume Docker nvidia-driver-vol utilisé par Wolf.

Il ne suffit pas toujours de reconstruire l’image gow/nvidia-driver:latest. Il faut aussi supprimer les anciens conteneurs qui utilisent encore le volume, puis recréer le volume proprement.

Arrêter Games on Whales / Wolf

Se placer dans le dossier contenant le fichier docker-compose.yml :

# cd /opt/gow

Arrêter les conteneurs du projet Compose :

# docker compose down

Supprimer les conteneurs utilisant l’ancien volume

Supprimer tous les conteneurs qui utilisent nvidia-driver-vol :

# docker rm -f $(docker ps -aq --filter volume=nvidia-driver-vol)

Supprimer l’ancien volume NVIDIA

Supprimer le volume obsolète :

# docker volume rm -f nvidia-driver-vol

Vérifier qu’il n’existe plus :

# docker volume ls | grep nvidia-driver

Si aucune ligne n’est retournée, le volume a bien été supprimé.

Reconstruire l’image NVIDIA driver

Reconstruire l’image gow/nvidia-driver:latest avec la version actuelle du pilote NVIDIA :

# cd /opt
# curl https://raw.githubusercontent.com/games-on-whales/gow/master/images/nvidia-driver/Dockerfile \
  | docker build \
    -t gow/nvidia-driver:latest \
    -f - \
    --build-arg NV_VERSION=$(cat /sys/module/nvidia/version) .

Recréer le volume NVIDIA

Recréer le volume nvidia-driver-vol :

# docker create --rm \
  --mount source=nvidia-driver-vol,destination=/usr/nvidia \
  gow/nvidia-driver:latest sh

Vérifier que le volume existe :

# docker volume ls | grep nvidia-driver

Optionnellement, vérifier son contenu :

# docker run --rm \
  --mount source=nvidia-driver-vol,destination=/usr/nvidia \
  debian:bookworm \
  ls -la /usr/nvidia

Redémarrer Games on Whales / Wolf

Retourner dans le dossier du fichier Compose :

# cd /opt/gow

Relancer Wolf :

# docker compose up -d

Ou, si le projet Compose utilise le nom opt :

# docker compose -p opt up -d