Dato che Roma ha ormai raggiunto la temperatura di Marrakech, e nel sacro manuale anti-accolli è esplicitamente vietato immergersi nel caos delle gite fuori porta marittime nei pressi della capitale, ho optato per qualche attività di laboratorio.

Mi sono imbattuto in questo articolo che spiega come eseguire programmi e giochi DOS via browser. Ringrazio l’autore per avermi ispirato in questo afoso pomeriggio romano. Siccome sto rimettendo in piedi il blog (colgo l’occasione per dare il benvenuto a Federico Martellini il nuovo co-autore di DevOpstribe.it) ho pensato di renderlo un po’ più interattivo innestando nella menu bar qualche demo. Una di queste è (come fa già gentilmente https://archive.org/) un’istanza di un gioco del 1991 che ai tempi mi affascinava molto: GORILLA.BAS (sì, per me è sempre stato GORILLA.BAS scritto tutto in maiuscolo e con l’estensione facente parte del nome del gioco).

Creare un container seguendo una parte della guida sopracitata è stato molto semplice. Spiego di seguito i passi e aggiungo i manifest per Kubernetes.

Creare un Dockerfile tipo questo

FROM node:16-alpine
ARG GAME_URL
WORKDIR site
RUN wget -O game.zip $GAME_URL
COPY index.html .
RUN sed -i s/GAME_ARGS/$GAME_ARGS/ index.html
RUN wget https://js-dos.com/6.22/current/js-dos.js && \
    wget https://js-dos.com/6.22/current/wdosbox.js && \
    wget https://js-dos.com/6.22/current/wdosbox.wasm.js
RUN npm install -g serve
EXPOSE 8000
ENTRYPOINT npx serve -l tcp://0.0.0.0:8000

Build immagine

podman build --build-arg GAME_URL=https://ia601903.us.archive.org/7/items/GorillasQbasic/gorillas_qbasic.zip --build-arg GAME_ARGS=\"gorilla.exe\"   -t  docker.io/luckysideburn/gorilla_bas:latest

Push immagine

podman push  docker.io/luckysideburn/gorilla_bas:latest

Creare manifest (kubectl apply -f … helm era troppo)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: gorilla-bas
  labels:
    app: gorilla-bas
spec:
  replicas: 1
  selector:
    matchLabels:
      app: gorilla-bas
  template:
    metadata:
      labels:
        app: gorilla-bas
    spec:
      containers:
      - name: gorilla-bas
        imagePullPolicy: Always
        image: docker.io/luckysideburn/gorilla_bas:latest
        ports:
        - containerPort: 8000
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  generation: 1
  name: gorilla-bas
  namespace: gorilla-bas
spec:
  ingressClassName: nginx
  rules:
  - host: gorilla-bas.devopstribe.it
    http:
      paths:
      - backend:
          service:
            name: gorilla-bas
            port:
              number: 8000
        path: /
        pathType: Prefix
---
apiVersion: v1
kind: Service
metadata:
  name: gorilla-bas
spec:
  selector:
    app: gorilla-bas
  type: ClusterIP
  ports:
    - protocol: TCP
      port: 8000
      targetPort: 8000

Repo GitHub

https://github.com/lucky-sideburn/gorilla.bas_k8s

La prova che sta girando davvero in k8s su devopstribe.it

Ho installato kube-ops-view per fare alcune prove ed è a tutti gli effetti esposto nel blog (devo ricordarmi di fare qualche vulnerability scanning, non vorrei essere bucato subito dopo l’atto della pubblicazione di questo post :D)

… comunque ecco il pod di GORILLA.BAS

Per giocarci è possibile andare su https://gorilla-bas.devopstribe.it o su https://archive.org/ che è sicuramente più rock-solid 😀

Thanks all!